在这种情况下,unique_ptr的行为应该是什么?

时间:2011-12-11 22:49:22

标签: c++ c++11 unique-ptr

说我有以下内容:

std::unique_ptr<A> pA;
pA(new A);

在这个复杂的例子中,pA(new A);的行为应该是什么?

据我所知,在MSVC2010中,void operator()(T*) const;返回后立即调用default_delete中的new并立即删除指针。而g ++(4.7.0)给了我no match for call (std::unique_ptr<A>)(A*)错误。

2 个答案:

答案 0 :(得分:6)

代码不应该编译。 std::unique_ptr不会超载operator()

Visual C ++ 2011 Developer Preview正确拒绝代码。 Visual C ++ 2010仅接受由a bug in its std::unique_ptr implementation引起的代码。

答案 1 :(得分:1)

MSVC对unique_ptr使用无状态删除器优化,即它利用空基类优化,并且只从删除器继承。不幸的是,继承是public,这就是您有权访问operator()仿函数的重载default_delete的原因。