【发布时间】:2010-09-01 19:02:41
【问题描述】:
除了使用 auto_ptrs 的所有已知好处之外,什么是 auto_ptr “最坏的做法”?
创建 auto_ptrs 的 STL 约束。 auto_ptrs 不满足“CopyConstructable”要求。另见 Scott Meyer 的“Effective STL”,第 8 项。
创建数组的 auto_ptrs 在销毁时,auto_ptr 的析构函数使用“delete”(而不是“delete[]”)来销毁拥有的对象,因此这段代码会产生未定义的行为: auto_ptr api(new int[42]);
在使用 auto_ptr 成员的类中不处理 copy-ctor 和 op=。 有人可能天真地认为通过使用 auto_ptr 成员不需要为类实现复制构造函数/赋值运算符。然而,即使是单个 auto_ptr 成员也会“毒害”一个类(即违反“CopyConstructable”和“Assignable”要求)。这些类的对象在复制/赋值操作过程中会部分损坏。
还有更多的 auto_ptr 陷阱吗?
【问题讨论】:
-
另外,
auto_ptr将在下一个 C++ 标准中被弃用(Sutter 希望在 2011 年 3 月之后正式投票通过 (herbsutter.com/2010/08/28/…),从而成为我们顽固分子的 C++0B )。如果您有unique_ptr,请改用它。