返回const std :: string& vs const char *为类成员

时间:2017-12-26 18:10:13

标签: c++ string member

考虑以下类示例:

FLAG_SECURE

使用以下访问者之一:

class AClass
{
    std::string myString;

    public:
    ...
}

const std::string& GetMyString() const
{
    return myString;
}

考虑到myString初始化一次并且永远不会更改,哪个访问器更好?第一个,还是第二个?在什么情况下,其中一个比其邻居更合适?

1 个答案:

答案 0 :(得分:0)

返回const std::string&的版本涵盖了返回const char*的用例的超集(毕竟,可以通过在返回值上调用.c_str()将其转换为后者),没有额外的弱点。鉴于std::string在其他方面更灵活,我更喜欢这两个选项中的const std::string&

那就是说,如果所涉及的拥有物不是不朽的话,他们都会感到尴尬;即使字符串永远不会更改,如果对象本身消失,对其字符串的引用现在也无效。如果有可能,您可能想要:

  1. 按价值返回
    1. 使用std::shared_ptr<std::string>成员并返回该成员(因此字符串的生命周期不再与创建它的对象的生命周期相关联)