C 摒棄了C中的realloc 函式

2021-06-01 00:15:22 字數 772 閱讀 4801

在c語言中,realloc()函式可以改變已分配記憶體區的大小。但是在c++中並不提供類似功能的函式。

如果你需要,你當然可以使用realloc()。但是,realloc()僅僅保證能工作於這樣的陣列之上:它們被malloc()(或者類似的函式)分配,包含一些沒有使用者定義的複製建構函式(copy constructors)的物件。而且,要記住,與通常的期望相反,realloc()有時也必須複製它的引數陣列。

在c++

中,處理記憶體重新分配的更好的方法是,使用標準庫中的容器,例如

vector

,並讓它自我增長。

c++裡沒有realloc不是遺憾,而是精心選擇和淘汰的結果。 在c裡,realloc的實現(在增加空間的時候)一般而言是重新分配一塊空間,   (這是由堆分配的策略決定的),  然後把舊空間的內容copy到新空間裡去。而物件空間怎麼copy?   是copy位元組還是用copy   constructor?  無論哪個都不合適。

那種想在原地(即首位址不動)就把申請記憶體空間擴大的思想不是乙個好思想。

所以不要過多糾結於如何在內建陣列或指標基礎上找類似於realloc()函式改變已分配記憶體區大小的函式了。

#include

using namespace std;

int main()

copy(oldbuf,oldbuf+5,newbuf);

delete oldbuf;

for(i=5;i<10;i++)

for(i=0;i<10;i++)

return 0;

}

C 中indexof和substring函式用法

c 中indexof和substring函式用法 abcdefg substring 4,2 返回的值為 ef 從字串 abcdefg 中第4位開始取,取到第2位。abcdefg substring 4 返回 efg 從字串 abcdefg 中第4位開始取,取到字串的尾部 code 處理鏈結 add...

C 中indexof和substring函式用法

一 substring用法 abcdefg substring 4,2 返回的值為 ef 從字串 abcdefg 中第4位開始取,取到第2位。abcdefg substring 4 返回 efg 從字串 abcdefg 中第4位開始取,取到字串的尾部 二 indexof lastindexof用法 ...

在C 中動態呼叫native dll的匯出函式

在 c 中我們能夠通過 loadlibrary,getprocaddress 來動態呼叫 dll 的匯出函式.在 c 中也能夠用這樣的方式嗎?在 dotnet 2.0 裡面這樣是可以的,這完全得益於 2.0新增的乙個函式 marshal.getdelegateforfunctionpointer 方...