关于C ++中智能指针的问题

时间:2011-03-01 23:02:14

标签: c++

auto_ptr只适用于局部变量吗?
如果我也需要使用类,我还需要复制指针吗?

2 个答案:

答案 0 :(得分:3)

auto_ptr析构函数会释放内存,所以你是对的。一旦你离开auto_ptr的范围,你指向的东西就会消失。您可能正在寻找类似于shared_ptr的东西,它是一个引用计数的智能指针。它将成为下一个C ++标准的一部分。 Boost has an implementation它,它也是part of the TR1 library。如果您的编译器支持std :: tr1实体,那么您应该拥有shared_ptr。

修改

正如评论中所指出的,auto_ptr复制语义会导致所有权的转移,但不一定会导致删除对象。因此,auto_ptr类型变量可以分配给另一个,并且可以用作函数返回值。 auto_ptr的关键是一次只能有一个引用特定实体。

我认为我错误地将scoped_ptr的特征分配给auto_ptr并且有点不公平。我自己的偏见是针对auto_ptr的,因为所有权的转移会对通常与复制无关的源对象产生副作用。

答案 1 :(得分:0)

在许多情况下,您不是必需在C ++中使用指针,因此您可能不需要任何智能指针:

struct Foo {
    int bar;
    int twice_bar()
    {
        return 2 * bar;
    }
};

int twice_x(int x)
{
    Foo f;
    f.bar = x;
    return f.twice_bar();
}