c++ - 如何统计一个对象的引用次数?

标签 c++

假设一个对象可以被其他对象引用(或引用)。目前我使用一个成员变量来记录它的引用次数。引用计数用于判断对象是否可以删除。

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/

相关文章:

C++ 分层窗口和 WM_MOUSEMOVE

c++ - 是否有类似于 Windows 的 Valgrind Memcheck 工具在出现免费错误后调试使用?

android - 使用 qt-android 获取通知

c++ - 模板继承的问题

c++ - 二叉搜索树的广度优先搜索

模板类的实例化对象上的 C++ 模板元函数

C++ - 具有多种参数类型的方法

c++ - CImg 的库名称是什么?

c++ - 类内部类链接问题的静态constexpr

c++ - 如何在双向链表中实现删除方法