gpt4 book ai didi

c++ - 在 shared_ptr 的复制构造函数中

转载 作者:太空狗 更新时间:2023-10-29 23:41:16 25 4
gpt4 key购买 nike

我对 shared_ptr 复制构造函数有些困惑。请考虑以下两行:

  1. 它是对 shared_ptr 对象的“常量”引用,它被传递给复制构造函数,以便初始化另一个 shared_ptr 对象。

  2. 复制构造函数还应该增加一个成员数据——“引用计数器”——它也在所有 shared_ptr 对象之间共享,因为它是一个指向某个整数的引用/指针,告诉每个 shared_ptr 对象他们中有多少人还活着。

但是,如果复制构造函数试图增加引用计数成员数据,它不会“命中”通过引用传递的 shared_ptr 的常量性吗?或者,复制构造函数是否在内部使用 const_cast 运算符来临时删除参数的常量性?

最佳答案

您遇到的现象并不是共享指针特有的。这是一个典型的原始示例:

struct Foo
{
int * p;
Foo() : p(new int(1)) { }
};

void f(Foo const & x) // <-- const...?!?
{
*x.p = 12; // ...but this is fine!
}

确实 x.pf 中有 int * const 类型,但它不是 int const * const!换句话说,您不能更改 x.p,但您可以更改 *x.p

这本质上就是共享指针复制构造函数中发生的事情(其中 *p 充当引用计数器的角色)。

关于c++ - 在 shared_ptr 的复制构造函数中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12342292/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com