6

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;
}
4

2 に答える 2