C++,一个类的空析构函数

C++, an empty destructor for a class

本文关键字:析构函数 一个 C++      更新时间:2023-10-16

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

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

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

另请参见

Forward声明和析构函数之间的关系