0
点赞
收藏
分享

微信扫一扫

C++定义常量shared_ptr踩坑

九月的栩 2022-03-11 阅读 82
c++

问题描述:

我在使用C++进行编程时想用底层const来修饰shared_ptr类型的变量,用意为不使用指针改变指针所指对象的值,最初错误定义变量的方式为

shared_ptr<T> a;
const shared_ptr<T> b;//想要定义的shared_ptr变量
b = a; // 报错 

但是在定义const shared_ptr变量之后对该变量进行赋值是编译器报错,报错内容为没有与这些操作数匹配的"="运算符

解决:

该问题在于使用const修饰shared_ptr和普通指针的语法略有不同,具体描述如下:

const shared_ptr<T> a;// 相当于 T *const a,顶层const不能改变指针的值
shared_ptr<const T> a;// 相当于 const T* a,底层const不能改变指针所指对象的值

所以我最开始的定义方式const shared_ptr<T> b相当于定义了一个const指针,是不能对改变量进行赋值操作的。

正确的写法应该是shared_ptr<const T>b

举报

相关推荐

0 条评论