c++ - 引用计数 - 内部引用问题
问题描述
我已经实现了自己的智能指针,一切正常,直到我意识到我的实现存在致命缺陷。问题是一个对象可以有一个智能指针,它可能持有对自身的引用。如果这是一个单层问题,这个问题将很容易避免 - 很容易发生的是一个引用计数的类将间接(通过其成员之一)持有对自身的引用。这意味着一个对象永远不会被删除删除。有什么办法/方法可以解决这个问题吗?
最简单的例子:
class Derived : public Object {
public:
static ref<Object> Create() { return ref<Object>(new Derived()); }
private:
Derived() : m_ref(this) // m_ref now holds a reference to Derived instance
{
// SOME CODE HERE
}
ref<Object> m_ref;
};
Object 是包含引用计数器的基类, ref 是智能指针,包含对其分配对象的引用
解决方案
没有简单的方法来处理这个问题。这是引用计数的一个基本问题。
要了解为什么会出现这种情况,请注意检测智能指针循环的难度与处理循环的难度相似。要检测周期,您需要能够从“根指针”遍历指针。如果你能做到这一点,你可以标记你在遍历过程中看到的那些。如果可以标记它们,则可以实现标记和清除,即垃圾收集。
推荐阅读
- python - 如何遍历两个 Python 列表以获取西班牙语和英语中相似的单词
- c# - 无法从 IIS 获取 USB Token 的私钥
- sql - 在同一个表中查找没有相似位置的条目
- c# - 为什么尽管有大对象堆碎片,但通用集合中的大多数数据结构都使用数组?
- python - 线程不允许在 python 烧瓶中保存文件
- python - 如何根据索引将来自不同字典的熊猫现有列的值相加?
- nginx - NGINX 在给定路径时呈现 PHP 文件,将索引作为没有路径的下载提供
- microsoft-graph-api - 如果地址包含特殊字符,如何更新工作表范围?
- javascript - 如何使用谷歌存储中的图像修复 Microsoft Azure 计算机视觉中的 InvalidImageFormat?
- javascript - 将一个文本框的值复制到另一个文本框返回 null