恒常正确性和shared_ptr转换

Const correctness and shared_ptr conversions

本文关键字:ptr 转换 shared 正确性      更新时间:2023-10-16

假设我有以下类型:

using pointer = std::shared_ptr<MyType>;
using pointer_to_const = std::shared_ptr<const MyType>;

现在,如果我有如下代码段:

void fun(pointer_to_const ptr);
pointer myObj = SomeFactoryMethod();
fun(myObj);

pointerpointer_to_const之间是否有自动转换?如果有,在此转换期间是否会复制基础MyType对象?

因为如果有转换,并且没有副本,那么在多线程上下文中,另一个线程可以使用原始myObj指针来修改基础对象,从而违反fun预期的const

是的,可以进行这种转换,并且将是指针和控制块的浅拷贝(引用计数)。

是的,这将起作用。将调用以下shared_ptr构造函数:

template< class Y > 
shared_ptr( const shared_ptr<Y>& r );

Y推断为const MyType.