小编tro*_*mpa的帖子

C++:auto_ptr +转发声明?

我有一个这样的课:

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每个班级宣布一个指针是一个巨大的麻烦,有时候,这是不可能的.这个问题通常是如何处理的?

c++ pointers memory-management auto-ptr shared-ptr

12
推荐指数
1
解决办法
4302
查看次数

标签 统计

auto-ptr ×1

c++ ×1

memory-management ×1

pointers ×1

shared-ptr ×1