c++ - 在 C++11 中有没有一种好方法可以将对其他对象的引用存储为成员?

标签 c++ oop c++11 design-patterns ownership

<分区>

大家好!

这是我卡住的地方: 我有三个具体类:ComputerPeripheralPersonComputerPeripheral 都是 Device 的扩展类。

Device 有一个私有(private)成员 Device.owner: Person,它应该存储某种对设备所有者的引用,和一个公共(public)函数 Device.getOwner():Person

另一方面,任何 Person 都有自己的私有(private)成员 Person.peripheralsPerson.computers 以及公共(public)函数 Person .get() ... 等等

是否有任何设计模式可以在类之间建立这些联系?

不转让直接所有权! (Computer 无权杀死 Person 等实例。这就是我提防使用指针的原因)

但是 如果 Computer 的某些实例将更改其所有者,那么它必须从先前所有者的计算机列表中消失并出现在新所有者的列表中.与 Peripheral 相同。

如果你有任何问题,请提出。可能,我对这种情况的解释很差。抱歉语言错误。

最佳答案

您可以使用 std::unique_ptr 来确保存在对该对象的单个引用。要更改所有权,请使用 std::move。

std::unique_ptr<Device> devicePtr(new Device());
std::unique_ptr<Device> devicePtr2(std::move(devicePtr));

每个人都会有它唯一的指针。

关于c++ - 在 C++11 中有没有一种好方法可以将对其他对象的引用存储为成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31452844/

相关文章:

java - 创建新用户的对象设计

java - 如何在比较成绩后打印学生姓名

c++ - 内部类模板的非成员运算符重载

c++ - 具有内部链接的命名空间

c++ - 如何以漂亮的格式放置不同的 C 字符串?

oop - 多重继承 : What's a good example?

python - 使用 PyArg_ParseTuple 的 C++ 和 Python 3 内存泄漏

c++ - 为什么这个程序抛出 'std::system_error' ?

c++ - 迭代器在C++内部如何工作?

c++11 - 似乎是 MS VC2010 lambda 表达式中的错误?