除了使用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陷阱吗?
不确定这是否是一个陷阱/陷阱,但它肯定不是很明显:
换一种说法:
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*.
| 归档时间: |
|
| 查看次数: |
810 次 |
| 最近记录: |