查了一下兩者的區別,網上回答基本意思是delete [] 不僅會釋放new xx**指向的記憶體,而且會逐步呼叫記憶體中每個物件的解構式,于是寫了個程式測驗一下,代碼如下:
class TestMem {
public:
TestMem() {
p_img = cvCreateImage(cvSize(10000, 10000), 8, 3);
};
~TestMem() {
AfxMessageBox(_T("release"));
if (p_img) cvReleaseImage(&p_img);
}
private:
IplImage *p_img;
};
void test()
{
// TODO: 在此添加控制元件通知處理程式代碼
TestMem **p_test_mem = new TestMem*[30];
for (int i = 0; i < 10; i++)
{
p_test_mem[i] = new TestMem;
}
delete [] p_test_mem;
}
直接用delete [] p_test_mem時,發現解構式并沒有被呼叫, 如果逐個洗掉:delete p_test_mem[i],則解構式可以正常被呼叫
請大神指點一下,哪里理解的不對
uj5u.com熱心網友回復:
你是二級指標,你釋放的是TestMem* ,而不是TestMemuj5u.com熱心網友回復:
說白了你記憶體泄露了uj5u.com熱心網友回復:
你那個例子都是錯的.你這樣寫才對
TestMem *pObjArry = new TestMem[10]
delete [] pObjArry;
uj5u.com熱心網友回復:
對于基本資料型別(內置資料型別), delete和delete[]等效.對于結構體或者類物件陣列釋放時, delete和delete[]就不等效.
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/34185.html
標籤:C++ 語言
上一篇:c++關于時間的問題
