我有这样的课:
class Inner;
class Cont
{
public:
Cont();
virtual ~Cont();
private:
Inner* m_inner;
};
在 .cpp 中,构造函数创建一个Inner
with实例,new
析构函数创建delete
它。这工作得很好。
现在我想更改此代码以使用auto_ptr
,所以我写:
class Inner;
class Cont
{
public:
Cont();
virtual ~Cont();
private:
std::auto_ptr<Inner> m_inner;
};
现在,构造函数初始化了auto_ptr
,析构函数什么也不做。
但它不起作用。当我实例化这个类时,问题似乎出现了。我收到这个警告:
警告 C4150:删除指向不完整类型“内部”的指针;没有调用析构函数
好吧,这显然很糟糕,我理解它为什么会发生,编译器不知道Inner
实例化模板时的 d'torauto_ptr<Inner>
所以我的问题是:有没有办法auto_ptr
像我在只使用普通指针的版本中那样使用前向声明?
必须对#include
我声明的每个类都声明一个指针是一个巨大的麻烦,有时甚至是不可能的。这个问题一般是怎么处理的?