unique_ptr
クラス内で初期化したいメンバー オブジェクトがあるとします。以下のコードを参照してください。均一な初期化 (中括弧) を使用する必要があるのはなぜですか? 2 番目の宣言は、次のようなエラーを吐き出します。
so.cpp:10:31: error: expected parameter declarator
std::unique_ptr<Foo> upf2(new Foo);
^
so.cpp:10:31: error: expected ')'
so.cpp:10:30: note: to match this '('
std::unique_ptr<Foo> upf2(new Foo); ^
2 errors generated.
そして、これが最も厄介な解析の問題だとは思いません。少なくともそうは思いません。
#include <memory>
class Foo
{
};
class Bar{
std::unique_ptr<Foo> upf1{new Foo}; // works fine
// std::unique_ptr<Foo> upf2(new Foo); // error here
};
int main()
{
Bar bar;
}