C++ 自动ptr陷阱和陷阱

C++ 自动ptr陷阱和陷阱,c++,auto-ptr,C++,Auto Ptr,除了使用auto_ptr的所有已知好处之外,auto_ptr的“最坏实践”是什么 创建自动打印的STL控件。 auto_PTR不满足“可复制”要求。另见Scott Meyer的“有效STL”,第8项 创建阵列的自动\u ptr 销毁后,auto_ptr的析构函数使用“delete”(并且从不使用“delete[])销毁所拥有的对象,因此此代码产生未定义的行为: 自动ptr api(新int[42]) 在使用auto_ptr成员的类中不考虑copy ctor和op=。 人们可能天真地认为,通过使用

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

  • 创建自动打印的STL控件。 auto_PTR不满足“可复制”要求。另见Scott Meyer的“有效STL”,第8项

  • 创建阵列的自动\u ptr 销毁后,auto_ptr的析构函数使用“delete”(并且从不使用“delete[])销毁所拥有的对象,因此此代码产生未定义的行为: 自动ptr api(新int[42])

  • 在使用auto_ptr成员的类中不考虑copy ctor和op=。 人们可能天真地认为,通过使用auto_ptr成员,不需要为类实现复制构造函数/赋值运算符。然而,即使是一个auto_ptr成员也会“毒害”一个类(即违反“可复制”和“可分配”的要求)。在复制/分配操作期间,此类类的对象将部分受损


  • 还有更多的自动陷阱吗?

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

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

    const auto_ptr<Foo> ap(new Foo());
    auto_ptr<Foo> ap2;
    
    ap2 = ap; // Not legal!
    
    const auto_ptr ap(新的Foo());
    自动ptr ap2;
    ap2=ap;//不合法!
    

    如果您想使用AutoJPTR参数,并保证您不拥有所包含的指针,这是非常有用的,但是如果您希望<>代码> conAutoPPTR <代码>的行为类似于<代码> fo const */COD>,也可以是令人惊讶的。将在下一个C++标准中被弃用。(萨特希望在2011年3月后正式投票(),从而成为美国顽固派的C++0B)。如果你有

    unique\u ptr
    ,请改用它。