auto_ptr无法正常工作 - 编译错误

时间:2014-05-27 19:43:03

标签: c++ qnx auto-ptr


大规模编辑:

按照juanchopanza的建议,我设法得到了这个最小的例子:

#include <memory>

struct a{
    int b;
};

int main()
{

    typedef std::auto_ptr<a> ArgAutoPtr;

    ArgAutoPtr floatingArg;

    floatingArg = ArgAutoPtr( new a );

}

这给了我错误:

no match for 'operator=' in 'm_floatingArg = std::auto_ptr<a>(((a*)operator new(4u)))'

QNX 6.4.1与GCC 4.3.3

修改

我设法像这样编译它。这是否按预期工作或将产生......无论邪恶auto_ptr生成什么?

ArgAutoPtr floatingArg2 = ArgAutoPtr( new a );
floatingArg = floatingArg2;

2 个答案:

答案 0 :(得分:6)

表达式ArgAutoPtr( new a )正在创建一个临时auto_ptr

auto_ptr::operator=的其他所有示例不同,

operator=对其参数采用非const 引用。非const引用不能绑定到临时引用。

答案 1 :(得分:2)

如果您已经拥有auto_ptr<T>类型的变量,则可以更轻松地将新指针直接提供给其reset方法。例如,您的案例将成为:

std::auto_ptr<a> myptr;
// : : :
myptr.reset(new a);

如果你正在构建一个新的auto_ptr<T>,你可以直接调用它的构造函数来清楚你正在做什么:

std::auto_ptr<a> myptr2(new a);

(作为后期编辑废弃的附注,命名带有前缀m_的本地可能会误导该代码的大多数读者。)