gpt4 book ai didi

c++ - auto_ptr 陷阱和误区

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:27:06 26 4
gpt4 key购买 nike

除了使用 auto_ptr 的所有已知好处之外,auto_ptr 的“最坏做法”是什么?

  1. 创建 auto_ptr 的 STL 约束器。auto_ptr 不满足“CopyConstructable”要求。另请参阅 Scott Meyer 的“有效 STL”,第 8 项。

  2. 创建数组的 auto_ptr销毁时,auto_ptr 的析构函数使用“delete”(而不是“delete[]”)来销毁拥有的对象,因此此代码会产生未定义的行为:auto_ptr api(new int[42]);

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

是否还有更多 auto_ptr 陷阱?

最佳答案

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

  • const auto_ptr 不能转移其所包含指针的所有权

换句话说:

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

ap2 = ap; // Not legal!

如果您想采用 auto_ptr 参数并保证您不会获得所包含指针的所有权,这实际上很有用,但如果您期望 const auto_ptr<Foo>,它也可能令人惊讶表现得像 Foo const*

关于c++ - auto_ptr 陷阱和误区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3621265/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com