知道什么引用了一个对象

sud*_*03r 2 c++ reference-counting

我有一个实现引用计数机制的对象.如果对它的引用数变为零,则删除该对象.

我发现我的对象永远不会删除,即使我完成了它.这导致内存过度使用.我所拥有的只是对象的引用数量,我想知道引用它的位置,以便我可以编写适当的清理代码.

有没有办法完成这个而不必在源文件中grep?(那会非常麻烦.)

小智 6

在C++中正确完成引用计数(引用计数)的很大一部分是使用资源分配初始化,因此不小心泄漏引用更加困难.但是,这并不能通过refcounts解决所有问题.

也就是说,您可以在引用计数中实现一个调试功能,该功能可以跟踪保存引用的内容.然后,您可以在必要时分析此信息,并将其从发布版本中删除.(使用与DEBUG宏的使用方式类似的配置宏.)

具体如何实现它将取决于您的所有要求,但有两种主要方法(简要概述差异):

  • 将信息存储在引用对象本身
    • 可以从调试器访问
    • 更容易实施
  • 每次获取或释放引用时输出到特殊的跟踪文件
    • 程序退出后仍然可用(甚至异常)
    • 可以在程序运行时使用,而无需在调试器中运行
    • 甚至可以在特殊版本构建中使用,并发送回给您进行分析

知道什么是引用给定对象的基本问题一般难以解决,并且需要一些工作.比较:您能告诉我知道您的邮政地址或电话号码的每个人和企业吗?