拥有对象的所有权却不指向该对象的`shared_ptr`
这种机制称为别名(alias)。
例子1
看这个例子:
Alias
和One
拥有对同一个对象的所有权,但是Alias
却不指向该对象(这里是1
),而指向另一个对象(这里是2
)。
注,上面所说的“对象”是抽象的对象,不是指C++里的类对象。“对象”可以指代一个人、物品、概念或事件,通常是在特定情境下讨论或关注的焦点。
例子2
这种机制的一种使用场景是,创建一个共享对象所有权的智能指针,同时将该指针指向该对象的某个成员。
运行结果:
Aoyu
和 aliasing
共享(均拥有)对同一个 Character
实例的所有权,所以引用计数为2
。
仅当两个 shared_ptr
(Aoyu
和aliasing
)都被销毁,Character
实例才会被销毁。
所拥有的指针(指向Character
的指针)用于引用计数,而储存的指针(指向成员m_name
的指针)在对指针进行解引用或调用get()
时返回。
参考
- Understanding Shared Pointers in C++: A Comprehensive Guide (studyplan.dev)
- Professional C++ 6th, Chapter 7, Section Smart Pointers, shared_ptr, Aliasing