考虑以下类示例:
FLAG_SECURE
使用以下访问者之一:
class AClass
{
std::string myString;
public:
...
}
与
const std::string& GetMyString() const
{
return myString;
}
考虑到myString初始化一次并且永远不会更改,哪个访问器更好?第一个,还是第二个?在什么情况下,其中一个比其邻居更合适?
答案 0 :(得分:0)
返回const std::string&
的版本涵盖了返回const char*
的用例的超集(毕竟,可以通过在返回值上调用.c_str()
将其转换为后者),没有额外的弱点。鉴于std::string
在其他方面更灵活,我更喜欢这两个选项中的const std::string&
。
那就是说,如果所涉及的拥有物不是不朽的话,他们都会感到尴尬;即使字符串永远不会更改,如果对象本身消失,对其字符串的引用现在也无效。如果有可能,您可能想要:
或
std::shared_ptr<std::string>
成员并返回该成员(因此字符串的生命周期不再与创建它的对象的生命周期相关联)