之间的关系,我有以下代码:向前声明和析构函数
#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();
}
我跑的程序,它印什么。
为什么?
in main,我创建new CFoward
,并在func
我删除它,并将其称为析构函数。
看来,析构函数还没有被调用。为什么?无论如何,这与前瞻性的减损有关吗?
'g ++'实际上告诉你当你编译这段代码时发生了什么。 – fuenfundachtzig
至少提高编译器的警告级别。这应该总是发出“删除指向不完整类型的指针”诊断。 –
GCC非常有用:'警告:在调用删除操作符时检测到可能的问题:[默认情况下启用]'frw'具有不完整类型[默认情况下启用]'CForward类的前向声明'[缺省情况下启用]析构函数,也不会调用特定于类的操作符delete,即使它们是在定义类时声明的。 – juanchopanza