c++ - std::auto_ptr 和 boost::shared_ptr 的语义

标签 c++ shared-ptr auto-ptr aliases

在我们的大型项目中,我们有很多具有以下 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 在语义上是否接近于 Ptrshared_ptr 是否与 ref 相同?还是应该显式使用 auto_ptr,因为它具有“所有权转移”语义?

谢谢,

最佳答案

std::auto_ptr 具有所有权转移语义,但它已完全损坏。如果你可以使用 boost::shared_ptr,那么你应该使用 boost::unique_ptr 而不是 std::auto_ptr,因为它做了一个会期待。它转移所有权使之前的实例无效,而std::auto_ptr不会。

更好的是,如果您可以使用 C++11,则可以切换到 std::unique_ptrstd::shared_ptr

关于c++ - std::auto_ptr 和 boost::shared_ptr 的语义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9076433/

相关文章:

c++ - Poco C++ 中的 lib 文件是什么

c++ - 从两个 cv::Mat 和一个掩码构造 cv::Mat

c++ - 共享指针上的原子操作,C++ 版本

c++ - 我的自动指针即使在所有权转移后也能正常工作

c++ - 为什么 unique_ptr 可以与 std 容器一起使用,例如 vectors<>?

c++ - 哪种方法可以在不阻塞主线程的情况下并行处理多个作业

c++ - 从未使用过转换为基类

c++ - 如何简洁地创建一个 shared_ptr?

c++ - 一个非常弱的引用(不能变成共享)

c++ - auto_ptr 未按预期工作 - 编译错误