我有以下代码:

#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段:

09-06 06:58