sof*_*ver 2 c++ copy-constructor shared-ptr c++11
我对shared_ptr复制构造函数有些困惑.请考虑以下两行:
它是对shared_ptr对象的"常量"引用,它被传递给复制构造函数,以便初始化另一个shared_ptr对象.
复制构造函数也应该增加一个成员数据 - "引用计数器" - 它也在所有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!
}
Run Code Online (Sandbox Code Playgroud)
这是事实,x.p具有类型int * const里面f,但它不是一个int const * const!换句话说,你不能改变x.p,但你可以改变*x.p.
这基本上是在共享指针复制构造函数中*p发生的事情(其中扮演引用计数器的角色).