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)
该函数是否修改了对象的内部状态?没有.*
该函数是否为其调用者(或其他外部环境)修改了对象内部状态的访问权限?没有.
这意味着将其标记为安全const.
*注意:@Yakk在注释中正确地指出,对于某些"内部状态"的定义,该函数确实修改了它,因为它增加char了共享指针所拥有的引用计数器m_data.你必须自己决定是否构成非常规操作; 严格语言的规则,它没有(因为它改变的东西指着由shared_ptr,而不是shared_ptr本身).但是,由于您首先存储了shared_ptr一个,我认为您可以共享所有权,因此不应将其视为修改.