我有以下代码,我认为应该在堆上分配arr属性,因为 test 对象是在堆上分配的。 但由于某种原因,即使我没有明确地调用它,也会调用A析构函数。对此有解释吗?
CODE:
class A {
public: ~A(){
cout<< "detor A"<< endl;
}
};
class C {
A arr[10];
public: ~C(){
// delete[]arr;
}
};
int main() {
C* test = new C();
delete test;
}
输出:
detor A
detor A
.
.
答案 0 :(得分:0)
当对象必须被销毁时,并且与分配对象的方式无关地调用对象的析构函数。
例如:
new
delete
的对象
最后一种情况导致您观察到的行为:您delete test
,需要销毁arr
,这需要销毁其每个项目。