我需要通过构造函数初始化unique_ptr吗?

时间:2019-05-19 20:17:14

标签: c++

这样初始化好吗?

 class Account
{
    public:
    string firstname;
    string lastname;
    int age;
    unique_ptr<Card>card;
    Account()
    {
        card=make_unique<Card>();
    }
    void SetCard()
    {
        card->
    }

因为我尝试了此unique_ptr<Card>card(new Card); 并且发生了错误。

1 个答案:

答案 0 :(得分:0)

  
    

因为我已经尝试过这个unique_ptrcard(new Card);并且发生了错误。

  

这在GCC / G ++ v8.3下可以作为类内初始化程序使用::

unique_ptr<Card>card{new Card};  // curly braces mandatory !
unique_ptr<Card> card{new Card};  // even better with a space after ">"

引用Bjarne Stroustrup在他的C ++书第四版中的第17.4.4段:

出于与解析和名称查找有关的模糊技术原因,{}和=初始值设定项表示法可用于类内成员初始值设定项,但()表示法不能使用。

>

此代码可以编译:

#include  <memory>
#include  <iostream>
using namespace std;

struct Card
{
   Card();

   int a;
};


Card::Card()
{
    a=0;
}


class Account
{
    public:
    string firstname;
    string lastname;
    int age;
    unique_ptr<Card>card{new Card};  // even better: add a space after ">"

    Account()
    {
        card=make_unique<Card>();
    }
    void SetCard()
    {
        card->a = 0;
    }
};
相关问题