我有一個類:A
,我寫了析構函數。執行析構函數
現在我有一個類B
:
class B {
A* a;
public:
B() {
a = new A[10];
}
~B() {
}
};
我想要實現B.
的析構函數,我認爲是這樣的:
~B() {
delete[] a;
}
,但我得到了一個錯誤。
也許我必須做下一行?
delete a;
任何幫助讚賞!
我有一個類:A
,我寫了析構函數。執行析構函數
現在我有一個類B
:
class B {
A* a;
public:
B() {
a = new A[10];
}
~B() {
}
};
我想要實現B.
的析構函數,我認爲是這樣的:
~B() {
delete[] a;
}
,但我得到了一個錯誤。
也許我必須做下一行?
delete a;
任何幫助讚賞!
你不說你得到了什麼錯誤,但是下面的編譯沒有錯誤:
class A {};
class B {
A* a;
public:
B() {
a = new A[10];
}
~B() {
delete[] a;
}
};
注意,這是因爲它違反了Rule of Three不完整的。 B::a
應該是一個合適的智能指針,或者該類需要實現複製構造函數和複製賦值運算符(或disable both)。更好的選擇是使用std::vector
或std::array
而不是原始指針。
什麼是錯誤? – sepp2k 2013-04-04 12:15:45
'delete [] a;'是正確的。你得到的錯誤是什麼? – jrok 2013-04-04 12:15:46
可能你省略了一些相關的代碼? – moooeeeep 2013-04-04 12:16:26