c++ - 你如何实例化智能指针类成员?

标签 c++ smart-pointers member move-semantics

我最近一直在做一些非常狡猾的智能指针编程,因为我从来没有真正理解 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/

相关文章:

c# - 在 C# 项目中构建 VisualMicro Arduino 项目

c - 使用 C++11 智能指针作为 C 函数参数

c++ - 智能指针 : set by reference, 重置、设置空值、空值检查或重置检查

c++ - 如何将 vector<unique_ptr<T>> 复制到独立 vector<T*>

java - Java中继承的同一个对象中具有相同身份的两个不同变量

c++ - 如何将非静态成员函数作为回调传递?

c++ - Mongodb geosphere 和 haystack 索引拒绝有效的行字符串

c++ - 如何在 C++ 中正确访问映射内存而没有未定义的行为

c# - 如何将 Byte* 从 C++ 转换为 C# 中的 Byte[]

c++ - Intellisense 说错误 : member "Class::field" is inaccessible but it's still works? 为什么?