|
|
2
3
每个智能指针对象都包含一个共享引用计数——每个原始指针对应一个。 你可以看看 this 文章。此实现将这些存储在一个单独的对象中,该对象会被复制。你也可以看看 boost's documentation 或者看看 Wikipedia article |
|
|
3
3
|
|
|
4
2
使用引用计数指针泄漏内存的最简单方法是创建循环。例如,一个所有指针都是shared_ptr且至少有两个元素的双链表保证不会被删除。即使外部指针被释放,内部指针仍将计数,引用计数也不会达到0。至少在最朴素的实现中是这样。 循环问题最简单的解决方案是将shared_ptr(引用计数指针)与不共享对象所有权的弱指针混合使用。 共享指针将共享资源(指针)和附加的reference_count信息。当你使用弱指针时,引用计数会加倍:有一个共享指针引用计数和一个弱指针引用计数。每当共享指针计数达到0时,资源就会被释放,但reference_count信息会一直保持活动状态,直到最后一个弱指针被释放。
|
|
|
5
2
当你复制shared_ptr对象时,它会复制带有引用计数的指针,增加引用计数,并将指针复制到包含的对象上。 |
|
|
6
2
原则上,你有一个“轻”指针类,它包含一个指向持有引用的类的指针,该类知道递增/递减引用并销毁指针对象。该引用计数类指向要引用的对象。 |
|
|
7
0
让我们来看一些代码:
内部变量
内部指针
一个指针
参考计数器
缺省构造
当一个新
这就是真正的引用计数发生的地方。
每当有新的
析构函数
正如你在代码中看到的,只有当对内存的引用计数为0时,对象才会在它死亡之前释放内存。
这很重要,因为,你看,如果
这
|