假设一个对象可以被其他对象引用(或引用)。目前我使用一个成员变量来记录它的引用次数。引用计数用于判断对象是否可以删除。
class Cited
{
public:
int m_citationCount;
};
我将变量公开。对象被引用时加1,未被引用时减1。把变量public 好像不太合适。如果它只有一种类型的 citer,我可以将 citer 类型作为 friend 。然而,可能有各种各样的引用者。有更好的主意吗?
更多信息:这些对象是树结构中的项或节点。一些节点可能引用其他节点。例如,一个节点称为空气,它代表具有密度等属性的物质空气。称为背景的节点可以引用空气节点以显示背景是空气。对树的操作是不可撤销的。如果用户删除后台节点,它只会被插入撤消堆栈。它并没有真正被删除。
最佳答案
省去悲伤,只使用 C++ 的 shared_ptr
模板。
好的,既然问题已经改变,答案也需要改变。
基本上,您只需要采用一些策略:
使用 shared_ptr
链接
任何时候你需要跟踪一个节点,使用 shared_ptr<Node>
其中 Node
是你的节点类。例如,如果 Node
需要引用另一个 Node
, 那么它有一个 shared_ptr<Node>
这样做。例如,根据您的示例,您可以:
类 Material :公共(public)节点{ //这里的 Material 属性 };
类背景:公共(public)节点{ //这里的 Material 属性 void SetMaterial(shared_ptr mat); };
void set_stage() { shared_ptr air = new Material(/构造函数参数/); shared_ptr skyBG = new Background(/构造函数参数/); skyBG->SetMaterial(空气);
撤消支持
要支持撤消,请记住撤消堆栈通常是一堆操作,每个操作都包含足够的信息来确定已完成的操作(因此可以撤消)。如果一个 Action 涉及一个节点,那么它应该(像其他任何东西一样)使用 shared_ptr<Node>
引用它。
关于c++ - 如何统计一个对象的引用次数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24502128/