我最近一直在做一些非常狡猾的智能指针编程,因为我从来没有真正理解 move 构造函数、 move 赋值等,因为像 MSDN 这样的地方给出的例子对我来说真的很费解。所谓狡猾,我的意思是从字面上改变诸如 (lvalue + 0) 之类的事情来生成右值。
举个例子(我不擅长想出不深奥的场景):
class Person {
public:
Person(int age) {
age_ = age;
}
private:
int age_;
};
class Life {
public:
Life(int age) {
person_ = std::make_unique<Person>(age);
}
private:
std::unique_ptr<Person> person_;
};
年龄部分必须是右值,使它成为右值的正确方法是什么?我读过 move 构造函数,但它们似乎传递对象本身的右值引用?
编辑:此外,是否可以从类构造函数的成员初始化列表中初始化智能指针成员?
最佳答案
您可以简单地执行以下操作,创建一个 Person 指针并将其分配给 unique_ptr:
class Life {
public:
Life(int age) : person_(new Person(age)) {}
...
关于c++ - 你如何实例化智能指针类成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35306905/