c++ - 将具有 std::auto_ptr 作为其成员变量的类的对象存储在 std::vector 中是否安全?

标签 c++ memory-management stl

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

所以,我上的课与下面的课大致相似:

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

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

最佳答案

这是不安全的,因为当容器复制 MyClass instnace 时,默认复制运算符将为所有成员调用复制 - 并且也会为 auto_ptr 成员调用复制,我们将遇到与您在问题中描述的相同情况(将 auto_ptr 存储在容器中)

顺便说一句:为了避免在编译时混淆,添加

private:
  MyClass& operator=( const MyClass& );  
  MyClass( const MyClass& );

如果您尝试使用复制运算符,编译器会输出错误,这可以让您免于数小时的调试。

关于c++ - 将具有 std::auto_ptr 作为其成员变量的类的对象存储在 std::vector 中是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/700588/

相关文章:

c++ - 使用 #ifndef 会破坏 node-gyp 模块

c++ - Visual Studio 为新的初始化程序提供部分代码覆盖

c - 为什么 mmap 在这里不起作用

java - 有哪些 Java 内存管理最佳实践?

c++ - 为什么 push_back 或 push_front 使双端队列的迭代器无效?

c++ - 如何设置二进制依赖的DLL名称?

c++ - 假位法(需要帮助)

iPhone内存管理(基础)

c++ - STL 和多线程

c++ - std::for_each 优于 std::set,C++11