我不能在我的项目中使用 shared_ptr,没有提升 :(

所以,我有一个与下面的类(class)大致相似的类(class):

class MyClass
{
private:
  std::auto_ptr<MyOtherClass> obj;
};

现在,我想将上述类的实例存储在 std::vector 中。安全吗?我 read here 将 std::auto_ptr 与 STL 容器一起使用是错误的。它适用于我这里的情况吗?

最佳答案



Assming 你的类没有用户定义的复制构造函数,那么不,它可能(见下文)不安全。当您的类被复制时(将其添加到 vector 时会发生这种情况),将使用 auto_ptr 的复制构造函数。这具有将被复制事物的所有权转移到拷贝的奇怪行为,因此被复制事物的指针现在为空。

虽然不太可能,但您可能真的想要这种行为,在这种情况下 auto_ptr 是安全的。假设你没有,你应该:

  • 添加复制构造函数来管理复制

  • 请注意,这还不够 - 有关更多信息,请参阅上面提到的后续问题。

    或者:
  • 使用更智能的、可能引用计数的指针,例如 boost 智能指针之一
  • 关于c++ - 将 std::auto_ptr 作为其成员变量的类的对象存储在 std::vector 中是否安全?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/700588/

    10-11 23:05
    查看更多