【发布时间】:2012-07-09 12:21:52
【问题描述】:
#include <memory>
struct foo
{
std::unique_ptr<int> p;
};
int main()
{
foo bar { std::unique_ptr<int>(new int(42)) };
// okay
new foo { std::unique_ptr<int>(new int(42)) };
// error: no matching function for call to
// 'foo::foo(<brace-enclosed initializer list>)'
}
统一初始化是否不适用于动态对象,或者这是 g++ 4.6.1 的一个缺点?
它适用于 g++ 4.7.1,但如果foo 继承自另一个类,则main 中的两行 都无法编译:
struct baz
{
// no data members, just some member functions
};
struct foo : baz
{
std::unique_ptr<int> p;
};
再次,我的编译器的缺点?还是统一初始化不能很好地与继承一起使用?
【问题讨论】:
-
new foo ({std::unique_ptr<int>(new int(42))});这适用于 4.6.1 -
@jrok 这是否意味着我使用的语法(没有额外的括号)在某种程度上是劣质的、非惯用的甚至是“错误的”?
-
前段时间有一个类似的问题,但是没找到。 IIRC,结论是这是一个错误。
标签: c++ c++11 initialization unique-ptr uniform-initialization