如果我有课
class foo {
private:
std::shared_ptr<char> m_data;
public:
std::shared_ptr<const char> GetData()
{ return m_data;}
}
我相信 std::shared_ptr< T >
应该转换为 std::shared_ptr< const T >
并共享同一个对象,但函数的 const 正确性是什么?
IE
这是有效的吗?
std::shared_ptr<const char> GetData() const;
最佳答案
函数会修改对象的内部状态吗?没有。*
函数是否允许其调用者(或其他外部环境)修改访问对象的内部状态?没有。
这意味着将其标记为 const
是安全的。
* 注意:@Yakk 在注释中正确指出,对于“内部状态”的某些定义,该函数确实修改了它,因为它增加了 char
上的引用计数器由共享指针 m_data
拥有。您必须自己决定这是否构成非常量操作;严格按照语言规则,它不会(因为它修改了 shared_ptr
指向的东西,而不是 shared_ptr
本身)。但由于您首先存储了 shared_ptr
,我认为您可以共享所有权,因此不应将其视为修改。
关于c++ - 返回 shared_ptr<> 的成员函数的 const 正确性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22476296/