以下对象属性分配在哪里?

时间:2018-02-24 19:02:51

标签: c++ memory-management

我有以下代码,我认为应该在堆上分配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
.
.

1 个答案:

答案 0 :(得分:0)

当对象必须被销毁时,并且与分配对象的方式无关地调用对象的析构函数。

例如:

  • 本地对象超出范围时会自动销毁
  • 使用new
  • 销毁分配有delete的对象
  • 成员对象在其封闭对象的销毁过程中被销毁

最后一种情况导致您观察到的行为:您delete test,需要销毁arr,这需要销毁其每个项目。