我已经阅读了你的一个答案(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的空析构函数如何帮助改进? 谢谢
答案 0 :(得分:2)
1)A
的析构函数应该知道如何销毁C
,因为A
可能包含auto_ptr
到C
。当包含对象死亡时,预期auto_ptr
'对象会死亡。因此,A
的析构函数应该知道如何销毁C
。
2)关键是析构函数定义只写在.cpp文件中。这意味着对析构函数的调用链接到从.cpp文件编译的对象。编译.cpp文件时,它可以访问C的定义(这是在答案中写的)。因此,.cpp文件中的析构函数可以根据需要破坏C而不是破坏C,就像在编译器只看到{{1}的前向声明的位置未定义和/或定义析构函数的情况一样。 }。
另外,请参阅