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