问题描述:
我在使用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
。