2

我已经阅读了您的一个答案(“空”构造函数或析构函数会与生成的构造函数做同样的事情吗?)。您写道:“假设 C 类型的对象是在 .cpp 文件中 A 的构造函数的定义中创建的,该文件还包含 struct C 的定义。现在,如果您使用 struct A 并要求销毁 A 对象,编译器将提供析构函数的隐式定义,就像上面的情况一样。该析构函数还将隐式调用 auto_ptr 对象的析构函数。这将删除它持有的指向 C 对象的指针 - 不知道C 的定义!出现在 .cpp 文件中,其中定义了 struct A 的构造函数”。你能为我解释两件事吗:1.为什么A的析构函数应该知道C的定义?2. 添加A的空析构函数对定位有什么帮助?谢谢

4

1 回答 1

2

1) 的析构函数A应该知道如何销毁,C因为A可能包含一个auto_ptrto Cauto_ptr当包含对象死亡时,'d 对象预计会死亡。因此, 的析构函数A应该知道如何销毁一个C.

2)关键是析构函数定义只写在.cpp文件中。这意味着对析构函数的调用链接到从 .cpp 文件编译的对象。编译 .cpp 文件时,它可以访问 C 的定义(即答案中所写的内容)。因此,.cpp 文件中的析构函数可以根据需要析构 C,而不是像在编译器仅看到class C.

另见

前向声明与析构函数的关系

于 2013-07-28T19:12:25.937 回答