返回shared_ptr <>的成员函数的const正确性

Spa*_*rky 16 c++ oop const c++11

如果我有课

class foo {
   private:
      std::shared_ptr<char> m_data;
   public:
      std::shared_ptr<const char> GetData()
      { return m_data;}
} 
Run Code Online (Sandbox Code Playgroud)

我相信std::shared_ptr< T >应该转换std::shared_ptr< const T >并共享同一个对象,但是函数的const正确性是什么?

IE 这有效吗?

std::shared_ptr<const char> GetData() const;
Run Code Online (Sandbox Code Playgroud)

Rei*_*ica 8

  • 该函数是否修改了对象的内部状态?没有.*

  • 该函数是否为其调用者(或其他外部环境)修改了对象内部状态的访问权限?没有.

这意味着将其标记为安全const.

*注意:@Yakk在注释中正确地指出,对于某些"内部状态"的定义,该函数确实修改了它,因为它增加char了共享指针所拥有的引用计数器m_data.你必须自己决定是否构成非常规操作; 严格语言的规则,它没有(因为它改变的东西指着shared_ptr,而不是shared_ptr本身).但是,由于您首先存储了shared_ptr一个,我认为您可以共享所有权,因此不应将其视为修改.