恒常正确性和shared_ptr转换
Const correctness and shared_ptr conversions
假设我有以下类型:
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);
pointer
和pointer_to_const
之间是否有自动转换?如果有,在此转换期间是否会复制基础MyType
对象?
因为如果有转换,并且没有副本,那么在多线程上下文中,另一个线程可以使用原始myObj
指针来修改基础对象,从而违反fun
预期的const
。
是的,可以进行这种转换,并且将是指针和控制块的浅拷贝(引用计数)。
是的,这将起作用。将调用以下shared_ptr
构造函数:
template< class Y >
shared_ptr( const shared_ptr<Y>& r );
用Y
推断为const MyType
.
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- 为什么我不能在不进行任何转换的情况下将浮点数放入任何类型的 ptr 中?
- 从const ptr*转换为ptr*时出现问题
- C++ 类型转换基础 PTR 到派生 PTR 保存在引用类中
- 将 lamba 隐式转换为函数 ptr 以创建类
- 为什么非常量ptr不能隐式地将ptr转换为常量作为模板中的参数
- C++双PTR到长PTR转换
- 无法将 Uchar PTR 转换为 OpenCVsharp
- 不能动态强制转换为ptr
- 函数PTR转换为带模板参数的函数
- 将派生类的ptr类型转换为ptr类型
- 将输入字符串转换为字符* <错误 Ptr>