auto_ptr陷阱和陷阱

Ral*_*lly 5 c++ auto-ptr

除了使用auto_ptrs的所有已知好处之外,auto_ptr是什么"最差实践"?

  1. 创建auto_ptrs的STL限制器.auto_ptrs不符合'CopyConstructable'要求.另见Scott Meyer的"Effective STL",第8项.

  2. 创建数组的auto_ptrs在销毁时,auto_ptr的析构函数使用'delete'(并且永远不会'delete []')来销毁拥有的对象,因此这段代码会产生未定义的行为:auto_ptr api(new int [42]);

  3. 不使用auto_ptr成员在类中处理copy-ctor和op =.有人可能天真地认为通过使用auto_ptr成员,不需要为类实现复制构造函数/赋值运算符.然而,即使是一个auto_ptr成员'毒化'一个类(即违反'CopyConstructable'和'Assignable'要求).在复制/分配操作期间,这些类的对象将被部分损坏.

还有更多的auto_ptr陷阱吗?

Tyl*_*nry 6

不确定这是否是一个陷阱/陷阱,但它肯定不是很明显:

  • const auto_ptr不能拥有所传输的包含指针的所有权

换一种说法:

const auto_ptr<Foo> ap(new Foo());
auto_ptr<Foo> ap2;

ap2 = ap; // Not legal!
Run Code Online (Sandbox Code Playgroud)

这实际上非常有用,如果你想获取一个auto_ptr参数并保证你不会获得所包含指针的所有权,但如果你期望a const auto_ptr<Foo>的行为类似于a ,那么它也会令人惊讶Foo const*.