【发布时间】:2020-05-31 11:44:14
【问题描述】:
在此页面 (http://www.cplusplus.com/reference/memory/shared_ptr/) 的第 5 段中,它说:
此外,shared_ptr 对象可以通过指针共享所有权,同时指向另一个对象。这种能力称为别名(参见构造函数),通常用于在拥有它们所属的对象时指向成员对象。因此,一个 shared_ptr 可能与两个指针相关:
一个存储的指针,即它所指向的指针,也是它用 operator* 取消引用的指针。
拥有的指针(可能是共享的),它是所有权组在某个时间点负责删除的指针,它被视为使用。
一般来说,存储的指针和拥有的指针指向同一个对象,但别名 shared_ptr 对象(使用别名构造函数及其副本构造的对象)可能指向不同的对象。
然后我阅读了这个页面 (http://www.cplusplus.com/reference/memory/shared_ptr/shared_ptr/) 关于 shared_ptr 的别名构造函数。但我仍然认为这种“混叠”行为令人困惑。 为什么会在这里?它是干什么用的?在什么情况下我需要这个功能?
【问题讨论】:
-
来自您自己的引用:“[aliasing] 通常用于指向成员对象,同时拥有它们所属的对象。”
-
你应该已经熟悉别名了,因为 C 和 C++ 默认都允许别名,即使不考虑
shared_ptr你已经在使用默认允许别名的语言。 -
@hvd 是的。在我发布这个问题后,我后来注意到了这一点。但还是不够具体。