回复 楼主 shuijingoj
realloc其实也是重新分配了一个新的更大空间,然后把以前的东西拷贝过去了。只是它是在函数里干的,没让你觉出来而已。
在C中的内存分配,只需申请空间,没用作初始化什么的工作,所以其实不太复杂。
C++中new的工作量大了很多,除了申请空间以外,还要挨个调用构造函数初始化申请的空间。当然转移的工作量也非常巨大,除了要申请新的,初始化,拷贝以外。还要把原先里面的的东西都调用析构函数消灭。总之C++为了类型安全,干了不少可能没用的事,效率什么的不是C++的最大的特色(当然跟其实的面向对象语言比还是快一些的~)。它的实现时,究竟做了什么事,程序员必须心知肚明,由程序员采取更高效的实现才是C++的观念。所以它没有提供效率极其低下的realloc功能的函数,也许是希望你自己能优化这些工作。
而且内存分配工作不是一定能够成功的,还可以使用异常处理之类的技术。系统函数其实无法满足人们多变的需要。要程序员自己动手想想办法~
而且C++并没有摒弃C的库函数,你要不怕费劲,可以自己用malloc, realloc来分配内存呀,只不过之后自己一定要想着初始化,要不然会出错误的。