我有一个这样的课:
class Inner;
class Cont
{
public:
Cont();
virtual ~Cont();
private:
Inner* m_inner;
};
Run Code Online (Sandbox Code Playgroud)
在.cpp中,构造函数创建了一个Innerwith new和析构函数delete的实例.这工作得很好.
现在我想更改此代码以便使用,auto_ptr所以我写道:
class Inner;
class Cont
{
public:
Cont();
virtual ~Cont();
private:
std::auto_ptr<Inner> m_inner;
};
Run Code Online (Sandbox Code Playgroud)
现在,构造函数初始化了auto_ptr,而析构函数什么都不做.
但它不起作用.当我实例化这个类时,问题似乎就出现了.我收到这个警告:
警告C4150:删除指向不完整类型'Inner'的指针; 没有破坏者叫
好吧,这显然非常糟糕,我明白为什么会发生这种情况,编译器不知道Inner实例化模板的时候auto_ptr<Inner>
所以我的问题:是否有一种方法可以使用auto_ptr前向声明,就像我在仅使用普通指针的版本中所做的那样?我
必须向#include每个班级宣布一个指针是一个巨大的麻烦,有时候,这是不可能的.这个问题通常是如何处理的?