我有以下代码:
#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
中删除了它,并将其称为析构函数。似乎没有调用析构函数。为什么?这与前进的脱节有关系吗?
最佳答案
实际上,您的前向声明引入了一个不完整的类型,该类型随后使用非平凡的析构函数进行定义,并且不能在delete表达式中使用:
根据n3337,第5.3.5/5段: