shared_ptr中的const:我需要两个还是仅一个

时间:2018-09-09 16:41:42

标签: c++ shared-ptr

我遇到了这段代码:

const std::shared_ptr<const T>& a_shared_pointer,

我真的很好奇这两个 const 是什么意思?它们是同一意思吗? a_shared_pointer 是指向我们无法修改的东西的共享指针吗?

2 个答案:

答案 0 :(得分:3)

就解除引用和保持一致性而言,共享指针类似于原始指针。

示例:

请注意,下面的术语[const]意味着我们可以选择是否插入const:

[const] X * [const] p;

为我们提供关于稳定性的4种选择:

X* p;-p是一个可变的X指针(可以更改为指向另一个X)

const X *p-p是指向不可变X的可变指针

X * const p;-p是指向可变X的不变指针(只能指向此X)

const X * const p;-p是指向不变X的不变指针(只能指向该X)

与shared_ptr类似:

std::shared_ptr<T> &p-引用指向可变T的可变指针

const std::shared_ptr<T> &p-指向可变T的不变指针的引用

std::shared_ptr<const T> &p-指向不可变T的可变指针的引用

const std::shared_ptr<const T> &p-指向不可变T的不可变指针的引用

答案 1 :(得分:1)

a_shared指针是对const std::shared_ptr的引用(例如,您不能通过该引用对指针进行非const操作,例如reset等),指向const T意味着指向对象的对象也是const(因此,再次不能执行a_shared_ptr->non_const_method())。