共享指针如何知道有多少指针指向该对象? (在本例中为shared_ptr)
基本上,shared_ptr
有两个指针:一个指向共享对象的指针和一个指向包含两个引用计数的结构体的指针:一个用于“强引用”,即具有所有权的引用,另一个用于“弱引用”,即不具有所有权的引用。
当您复制一个shared_ptr
,复制构造函数会增加强引用计数。当你摧毁一个shared_ptr
,析构函数递减强引用计数并测试引用计数是否为零;如果是,析构函数将删除共享对象,因为没有shared_ptr
不再指着它了。
弱引用计数用于支持weak_ptr
;基本上,任何时候weak_ptr
是从创建的shared_ptr
,弱引用计数会递增,并且每当一个被破坏时,弱引用计数就会递减。只要强引用计数或弱引用计数大于零,引用计数结构就不会被破坏。
实际上,只要强引用计数大于零,共享对象就不会被删除。只要强引用计数或弱引用计数不为零,引用计数结构体就不会被删除。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)