【发布时间】:2016-05-29 18:04:43
【问题描述】:
我有一堂课:
class C1 {
std::vector<C2> vec;
};
我想实现 C1 和 C2 类,向量中的元素(C2 类)可能导致将自身从容器 vec 中移除。如何做到这一点最好?
也许我可以将对 C1 类的引用传递给 C2 类并调用 C1 中的方法来删除这个元素。这是很好的解决方案吗?如何在 C++11 中做到这一点?
(C1是程序中唯一的一个类)
【问题讨论】:
-
您是否尝试为您建议的解决方案编写代码?
-
为了将
C2与其存储方式分离,您可以为其提供一个知道如何执行操作的函数来调用。 -
你必须维护所有权,否则你最终会陷入循环引用(资源/内存泄漏)
-
与其让您的 C2 对象尝试删除自身(这可能会变得混乱),不如在您的 C2 对象中添加一个布尔“死”变量。当你的 C2 对象想要离开时,它会将“dead”变量设置为 true,并且在向量中查看的其他代码知道不对设置了“dead”标志的 C2 对象做任何事情(除了可能将它们从向量——在方便的时候可以做的事情)。
标签: c++ c++11 design-patterns