auto_ptr陷阱和陷阱

时间:2010-09-01 19:02:42

标签: 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'要求)。在复制/分配操作期间,此类类的对象将被部分损坏。

  4. 还有更多的auto_ptr陷阱吗?

1 个答案:

答案 0 :(得分:6)

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

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

换句话说:

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

ap2 = ap; // Not legal!

如果您想要获取auto_ptr参数并保证您不会获取所包含指针的所有权,那么这实际上非常有用,但如果您期望{{},那么它也会令人惊讶{1}}表现得像const auto_ptr<Foo>