C ++,类的空析构函数

时间:2013-07-28 18:59:32

标签: c++ explicit-destructor-call

我已经阅读了你的一个答案(Will an 'empty' constructor or destructor do the same thing as the generated one?)。你写了: “我们假设类型C的对象是在.cpp文件中A的构造函数的定义中创建的,它还包含struct C的定义。现在,如果使用struct A,并且需要销毁A对象,编译器将提供析构函数的隐式定义,就像上面的情况一样。析构函数也会隐式调用auto_ptr对象的析构函数。这将删除它所持有的指针,指向C对象 - 不知道C的定义!出现在.cpp文件中,其中定义了struct A的构造函数“。你能为我解释两件事: 1.为什么A的析构函数应该知道C的定义? 2.添加A的空析构函数如何帮助改进? 谢谢

1 个答案:

答案 0 :(得分:2)

1)A的析构函数应该知道如何销毁C,因为A可能包含auto_ptrC。当包含对象死亡时,预期auto_ptr'对象会死亡。因此,A的析构函数应该知道如何销毁C

2)关键是析构函数定义只写在.cpp文件中。这意味着对析构函数的调用链接到从.cpp文件编译的对象。编译.cpp文件时,它可以访问C的定义(这是在答案中写的)。因此,.cpp文件中的析构函数可以根据需要破坏C而不是破坏C,就像在编译器只看到{{1}的前向声明的位置未定义和/或定义析构函数的情况一样。 }。

另外,请参阅

The relation between Forward declaration and destructors