问题标签 [reference-counting]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
495 浏览

delphi - Delphi:从什么时候开始不再在 with 块的末尾释放接口引用?

我最近偶然发现了一个由我编写的一些非常旧的代码引起的问题,该代码显然假设with语句中使用的接口引用将在with离开 -block 后立即释放 - 有点像隐式try-finally-block(类似于 C# 的using-statement如果我理解正确)。

显然(在 Delphi 2009 中)这不是(不再是?)情况。有谁知道这是什么时候发生的?还是我的代码一开始就完全错误?

为了澄清,这里有一个简化的例子:

每当有人开始旧的“with是邪恶的”论点时,这始终是我想到的一个例子,它让我继续“是的,但是......”。好像我错了...有人可以确认吗?

0 投票
3 回答
622 浏览

c - 在 C 中使用简单引用计数器的示例代码或项目

我想知道在 C 中集成引用计数(或其他托管内存)机制来管理我的一些结构库会有多困难。你会推荐我看哪些示例代码?

0 投票
1 回答
1820 浏览

python - 为什么 Python 在 False 和 True 上保留引用计数?

我正在查看 hasattr 内置函数的源代码,并注意到有几行引起了我的兴趣:

不是Py_False全球Py_True价值观吗?纯粹出于好奇,为什么 Python 保留这些变量的引用计数?

0 投票
3 回答
1143 浏览

interface - COM 对象到 COM 接口的 dynamic_cast 不会增加引用计数,是吗?

如果我有一个 C++ 类 X,它实现了 COM 接口 IY 和 IZ,并且我有一个指向 X 类型对象的 IY 接口的指针 y,我这样做:

这不会影响对象的引用计数,是吗?我不必做一个 Release() 来解释它,对吧?

如果重要的话,我正在使用 ATL/COM。

我猜答案是“不,它不会增加引用计数,不,你不必 Release()”,但我想确定一下。

提前致谢。

0 投票
1 回答
955 浏览

.net - 如何获取托管对象的引用计数?

.NET 探查器可以显示对托管对象的引用计数。他们如何计算它们?

0 投票
1 回答
483 浏览

python - Python:将 c++ 对象传递给脚本,然后从脚本调用扩展 c++ 函数

首先,问题是程序因双倍内存释放而失败......

交易是:我有

我将它传递给我的脚本。它工作正常。像这样:

其中 pFunc 是一个 python 函数......所以,我的脚本有函数,我使用 obj。

当然我已经定义了python类

“Extend_module”是一个扩展 C++ 模块,我在其中定义了函数“bar”。

我希望“bar”功能可以正常工作,但我却得到了内存错误:“双内存释放或损坏”。

这是“酒吧”功能:

它在“bar”的返回语句中失败......

0 投票
3 回答
750 浏览

objective-c - 代码示例:为什么我释放了这个 NSString 对象后仍然可以访问它?

我只是在编写一些探索性代码来巩固我对 Objective-C 的理解,我遇到了这个我不太明白的例子。我定义了这个方法并运行代码:

运行代码并调用此方法后,我注意到以下几点:

  1. 通常,如果我尝试访问在达到零保留计数后被释放的东西,我会收到 EXC_BAD_ACCESS 错误。在这里,我得到了一个 malloc“双重释放”错误。这是为什么?

  2. 无论我在代码中添加多少行“[stringPointer release]”,NSLog 都会报告保留计数为 1。当我添加更多版本时,我只会得到更多“双重释放”错误。为什么发布声明没有按预期工作?

  3. 尽管我过度释放了 stringPointer 并且收到了一堆“双重释放”错误,但返回值仍然像什么都没发生一样工作(我在主代码中有另一个 NSLog 报告返回值)。程序继续正常运行。再次,有人可以解释为什么会发生这种情况吗?

这些例子是相当微不足道的,但我试图完全掌握正在发生的事情。谢谢!

0 投票
5 回答
4246 浏览

c++ - 重载操作符delete,还是怎么杀猫?

我正在尝试重载运算符 delete,以便我可以将一个普通指针返回给那些不希望使用智能指针的人,但能够控制何时删除对象。

我定义了一个 Cat 类,它由多个灵魂构成,有一个不执行任何操作的重载运算符 delete,以及减少灵魂数量的析构函数(并且还做一些吹牛)。当 souls 达到 0 时,析构函数调用全局 ::delete,猫就死了。

这听起来很简单,但并不像预期的那样工作。这是代码:

这是主要的:

我希望循环会运行 9 次,然后会发生一些不愉快的事情(崩溃)。但是,这是输出:

似乎在第一次删除后,名称成员被破坏,下一次删除导致崩溃。有什么解释吗?我在 Linux 上使用 gcc 编译,可能是编译器错误吗?

顺便说一句,当我在 cout << *p 中使用 operator<<() 而不是 repotr() 时,这也很奇怪:它进入了从 operator<<() 中调用构造函数的无限循环。这里发生了什么?:)

谢谢!

0 投票
5 回答
248 浏览

c++ - 知道什么引用了一个对象

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

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

有什么方法可以在不必在源文件中使用 grep 的情况下完成此操作?(那会很麻烦。)

0 投票
3 回答
5275 浏览

objective-c - 将文字字符串分配给带有“=”的 NSString 实际上有什么作用?

以下行实际上是做什么的?

假设在标题中声明了“字符串”:

“=”在这里实际上做了什么?它对“字符串”的引用计数有什么作用?特别是,假设由于某种原因没有分配“字符串”,是否需要释放它?

谢谢!