關於C 的new是否會對記憶體初始化的問題

2021-06-20 06:03:30 字數 590 閱讀 3656

先把結論放上來:

c++在new時的初始化的規律可能為:對於有建構函式的類,不論有沒有括號,都用建構函式進行初始化;如果沒有建構函式,則不加括號的new只分配記憶體空間,不進行記憶體的初始化,而加了括號的new會在分配記憶體的同時初始化為0。

以下**:

#include

using namespace std;

int main()

delete a;

int *b=new int[1000];

for(int i=0;i<100;i++)

delete a;

int *b=new int[1000]();

for(int i=0;i<100;i++);

};main函式中使用語句:

a *b=new a;

cout但是,如果吧a的建構函式刪掉,則兩個語句輸出的結果分別是:隨機數,0。

由此可見,c++在new時的初始化的規律可能為:對於有建構函式的類,不論有沒有括號,都用建構函式進行初始化;如果沒有建構函式,則不加括號的new只分配記憶體空間,不進行記憶體的初始化,而加了括號的new會在分配記憶體的同時初始化為0。

指標初始化對記憶體訪問的影響

空指標的使用可能造成錯誤,指標初始化的時候未賦初值而造成的野指標的錯誤更加可怕。前段時間在重寫opencv lk金字塔光流迭代演算法 cvcalcopticalflowpyrlk 函式 的時候,對初始化在程式中的重要作用有了更加深入的認識。程式的具體問題如下,在處理比較小的的時候,直接執行會發生錯誤...

C 中new是否進行初始化的問題

c 在new時的初始化的規律可能為 對於有建構函式的類,不論有沒有括號,都用建構函式進行初始化 如果沒有建構函式,則不加括號的new只分配記憶體空間,不進行記憶體的初始化,而加了括號的new會在分配記憶體的同時初始化為0。以下 include using namespace std int main...

c專家程式設計 對記憶體的思考

1 intel 80x86系列處理器的發展歷程 4008 8008 8080 8085 8086 80186 80286 80386 80486 pentium 32 2 記憶體模型以及它的工作原理 段的含義 一塊64kb的記憶體區域,有乙個段暫存器所指向。記憶體位址的形成 取得暫存器的值,左移4位...