说我有以下内容:
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*)
错误。
说我有以下内容:
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*)
错误。
代码不应编译。 std::unique_ptr
不会超载operator()
。
Visual C++ 2011 Developer Preview 正确地拒绝了该代码。Visual C++ 2010 仅接受该代码,因为它的实现存在错误std::unique_ptr
。
MSVC 对 使用无状态删除器优化unique_ptr
,即它利用空基类优化并仅从删除器继承。不幸的是,继承是public
,这就是为什么您可以访问仿函数的重载operator()
。default_delete