正文

回到頂部

1. 一個錯誤釋放內存的例子

下面的場景會有什么錯?

1 std::string *stringArray = new std::string[100];2 3 ...4 5 delete stringArray

 

一切看上去都是有序的。new匹配了一個delete。但有一些地方確實是錯了。程序的行為是未定義的。至少來說,stringArray指向的100個string對象中的99個看上去都不能被正確釋放,因為他們的析構函數可能永遠不會被調用。

回到頂部

2. 使用new 和delete時究竟做了啥?

當你使用一個new表達式(通過使用new動態(tài)的創(chuàng)建一個對象)時,會發(fā)生兩件事情。第一,內存被分配(通過一個叫做operator new的函數,看Item 49和Item 51)。第二,在分配的內存上調用了一個或多個構造函數。當你使用一個delete

網友評論