std::shared_ptr
的实现说明部分的一段引用,其中提到有两个不同的指针(如加粗所示):一个可以由get()
返回,另一个则保存在控制块中。在典型的实现中,
std::shared_ptr
只保存了两个指针:1. 存储的指针(由
get()
返回的指针)
2. 指向控制块的指针控制块是一个动态分配的对象,包含以下内容: 1. 指向受管理对象或它自己的指针 2. 删除器(类型擦除) 3. 分配器(类型擦除) 4. 拥有受管理对象的
shared_ptrs
数量
5. 引用受管理对象的weak_ptrs
数量
shared_ptr
直接持有的指针是由get()
返回的指针,而控制块持有的指针或对象是当共享所有者数量达到零时将被删除的指针。这些指针不一定相等。我的问题是,为什么需要管理对象的两个不同指针(即加粗的两个指针),除了指向控制块的指针之外?
get()
返回的指针不足以胜任吗?为什么这些指针不一定相等?