在STL中使用引用计数的数据结构有哪些行为异常?

unj*_*nj2 7 c++ containers garbage-collection stl data-structures

"有效STL"中的Scott Meyer说,在决定使用哪种数据结构时要考虑的一件事是容器是否使用引用计数.他说这种方法存在一些行为异常现象.

它们中有哪些是什么?为什么像'string'和'rope'这样的容器有异常行为?

arm*_*mel 1

作为示例,引用计数字符串(特别是具有“子部分”处理(带有开始/结束切片)的字符串)可能发生的一种异常是“不幸的锁定”。

假设您为文件的整个文本分配内存。然后,您解析文件并使用一些“slice()”、“left()”、“mid()”或等效方法。您可能会结束锁定文件的整个字符串,而其中可能只有很小一部分包含实际文本数据(其余部分是已解析的数字、标点符号或其他内容)。因此,您最终可能使用了超出所需的内存,同时更轻松地控制了峰值使用量。在这种情况下,如果您使用多线程并在各个线程中密集使用某些字符串,则可能会出现第二个问题:不必要的内存争用,字符串的引用计数可能会一直递增/递减,并且原子性可能会变得 int顺便说一句,减慢所有线程的完成速度。

不过,只要您知道应用程序中的潜在问题并防止它们(在这种情况下,只需通过复制字符串“单独”使用它们),就没有什么可以反对引用计数的。