Forward声明和析构函数之间的关系
The relation between Forward declaration and destructors
我有以下代码:
#include <iostream>
using namespace std;
class CForward;
void func(CForward* frw) { delete frw; }
class CForward
{
public:
~CForward() { cout << "Forward" << endl; }
};
int main()
{
func(new CForward);
cin.get();
}
我运行了这个程序,但它什么也没打印。
为什么?
大体上,我创建了new CFoward
,在func
中,我删除了它并称之为析构函数。
似乎还没有调用析构函数。为什么?这与远期减仓有关吗?
事实上,正向声明引入了一个不完整的类型,该类型后来用非平凡的析构函数定义,并且不能在删除表达式中使用:
来自n3337,第5.3.5/5段:
5如果要删除的对象在删除时具有不完整的类类型,并且完整的类具有非平凡的析构函数或释放函数,行为是不确定的。
是。事实上,在函数func中,编译器并不知道cForward的完整类型。因此,解构主义者从未被称为。
如果你把函数放在类之后,它会很好地工作。
相关文章:
- this_thread::sleep_for和计时时钟之间的关系是否由C++11标准指定
- 我已经建立了递归关系,它找到了两个字符串之间最长的连续公共字符串,我怎么能跳过其中一个字符串中的一个字符
- 移动语义和深层/浅层复制之间有什么关系?
- #include < conio.h> 和 getch() 方法之间的关系是什么?
- 超市管理系统的类别之间应该是什么关系?
- 指针和程序性能之间有什么关系吗?
- node.h/node.cpp/nodelist.cpp之间的关系
- 运行线程和线程对象之间的关系
- 类型大小与其值范围之间的关系?
- 2个期货之间的依赖关系
- Qt:工作线程和 GUI 事件之间的关系
- 如何强制 qbs 产品与依赖关系之间的同步?
- 在头文件和 .cc 文件之间建立关系
- C 和Windows OS之间的关系
- 为什么赋值运算符和相等运算符之间没有 1:1 的关系?
- QComboBox 在 editTextChanged 和 currentIndexChanged 之间的关系
- 使用 .depends 指定 SUBDIRS 项目之间的依赖关系不起作用
- 各种初始化和构造之间的关系
- 变量之间的关系
- Objective-C源代码和clang -rewrite-objc C++代码之间有什么关系?