在我们的大型项目中,我们有很多具有以下 typedef
的类:
class Foo
{
public:
typedef std::auto_ptr<Foo> Ptr;
typedef boost::shared_ptr<Foo> Ref;
...
};
...
Foo::Ref foo(new Foo);
...
doBar(foo);
...
它们的使用非常方便。但是我怀疑 auto_ptr
在语义上是否接近于 Ptr
而 shared_ptr
是否与 ref 相同?还是应该显式使用 auto_ptr
,因为它具有“所有权转移”语义?
谢谢,
最佳答案
std::auto_ptr
具有所有权转移语义,但它已完全损坏。如果你可以使用 boost::shared_ptr
,那么你应该使用 boost::unique_ptr
而不是 std::auto_ptr
,因为它做了一个会期待。它转移所有权并使之前的实例无效,而std::auto_ptr
不会。
更好的是,如果您可以使用 C++11,则可以切换到 std::unique_ptr
和 std::shared_ptr
。
关于c++ - std::auto_ptr 和 boost::shared_ptr 的语义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9076433/