`const shared_ptr <T>`和`shared_ptr <const T>`之间的区别?

Dav*_*hun 104 c++ boost const shared-ptr

我正在为C++中的共享指针编写一个访问器方法,如下所示:

class Foo {
public:
    return_type getBar() const {
        return m_bar;
    }

private:
    boost::shared_ptr<Bar> m_bar;
}
Run Code Online (Sandbox Code Playgroud)

因此,为了支持getBar()返回类型的常量应该是一个boost::shared_ptr阻止Bar它指向的修改.我的猜测shared_ptr<const Bar>我希望返回的类型,但是const shared_ptr<Bar>会阻止指针本身的重新分配指向不同Bar但允许修改Bar它指向的......但是,我不确定.我很感激,如果有人知道肯定可以证实这一点,或者如果我弄错了就纠正我.谢谢!

Cas*_*eri 147

你是对的.shared_ptr<const T> p;类似于const T * p;(或等效地T const * p;),即,指向的对象是,constconst shared_ptr<T> p;类似于T* const p;指的pconst.综上所述:

shared_ptr<T> p;             ---> T * p;                                    : nothing is const
const shared_ptr<T> p;       ---> T * const p;                              : p is const
shared_ptr<const T> p;       ---> const T * p;       <=> T const * p;       : *p is const
const shared_ptr<const T> p; ---> const T * const p; <=> T const * const p; : p and *p are const.
Run Code Online (Sandbox Code Playgroud)

同样适用于weak_ptrunique_ptr.

  • 我很高兴它有所帮助.我用来记住`const T*p;','T const*p;`和`T*const p`的最后一个提示.从`*`看作是一个分隔符,因为什么是`const`就是`*`的同一侧. (7认同)
  • 您还回答了我脑海中关于常规指针的问题(const T* 与 T* const 与 T const *)。:) 我没有提到这一点,因为我不希望我的问题太广泛,而这是与我当前任务相关的问题。不管怎样,我想我现在已经很明白了。谢谢! (4认同)
  • 我的经验法则是`const`总是指它左侧的东西.如果左边没有任何东西,那就是右边的东西. (3认同)