这样初始化好吗?
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);
并且发生了错误。
答案 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;
}
};