C++,一个类的空析构函数
C++, an empty destructor for a class
我读过你的一个答案(空的构造函数或析构函数会做与生成的构造函数相同的事情吗?)。您写道:"假设C类型的对象是在.cpp文件中A的构造函数的定义中创建的,该文件还包含结构C的定义。现在,如果使用结构A,并且需要销毁A对象,编译器将提供析构函数的隐式定义,就像上面的情况一样。该析构函数还将隐式调用auto_ptr对象的析构函数。这将删除它所持有的指向C对象的指针——而不知道C的定义!这出现在.cpp文件中,其中定义了结构A的构造函数"。你能为我解释两件事吗1.为什么A的析构函数应该知道C的定义?2.添加A的空析构函数对场景有何帮助?感谢
1)A
的析构函数应该知道如何销毁C
,因为A
可能包含auto_ptr
到C
。当包含的对象死亡时,auto_ptr
’d对象预计会死亡。因此,A
的析构函数应该知道如何销毁C
。
2) 关键是析构函数定义只写在.cpp文件中。这意味着对析构函数的调用链接到从.cpp文件编译的对象。编译.cpp文件时,它可以访问C的定义(即答案中所写的内容)。因此,.cpp文件中的析构函数可以根据需要析构函数C,而不是像没有定义析构函数和/或在编译器只看到class C
的前向声明的时候定义的那样无法析构函数。
另请参见
Forward声明和析构函数之间的关系
相关文章:
- 有一个构造函数,但有两个析构函数
- 为什么数组中对象的析构函数在被另一个对象替换时不被调用?
- 析构函数调用c++中的一个向量
- 在Visual Studio中,与std::async一起使用时不调用"thread_local"变量"析构函数,这是一个错误吗?
- 在两个类上协调析构函数,其中一个类需要首先清理
- 在删除另一个类中的一个类的对象时析构函数如何工作
- 如何在另一个类的向量中调用派生类的析构函数
- 触发的断点(析构函数)与类模板类型是自身的一个版本
- 错误:在“(”标记之前进行预期的构造函数、析构函数或类型转换.即使我有一个构造函数
- 为什么复制构造函数不是微不足道的,因为有一个用户定义的析构函数?
- GCC 9.1 返回 void& 作为显式析构函数调用的结果类型。这是一个错误吗?
- 这个递归类需要一个自定义析构函数?
- 如果我在析构函数中创建一个对象,会发生什么
- 是否可以在另一个类的实例中显式调用对象的析构函数?
- 设计一个没有虚拟析构函数的多态类层次结构
- 在这种情况下,我的派生类是否还需要一个虚拟析构函数
- 一个对象在析构函数中获取互斥以防止删除它自己
- 什么应该在一个适当的析构函数中
- 全局静态常量shared_ptr被另一个shared_ptr的析构函数奇怪地窃取和删除,为什么?
- c++析构函数调用一个delete运算符