如何在默认构造函数中初始化对空字符串的类成员引用

时间:2015-02-22 14:59:32

标签: c++ reference default-constructor

如何在此默认构造函数中初始化对空字符串("")的类成员引用。

class Document {
    string& title;
    string* summary;

    Document() : title(/*what to put here*/), summary(NULL) {}
};

1 个答案:

答案 0 :(得分:3)

没有明智的方法可以做到这一点。引用必须引用现有对象(更好的方式是将引用 现有对象),以及将在初始化列表中构建的std::string在构造函数完成后,""将被销毁,在每次尝试使用您的成员变量时都会留下未定义的行为。

现在,我说"没有合理的方式"。当然,有一些黑客可以实现你想要的东西,例如:

// bad hack:
std::string &EmptyStringThatLivesForever()
{
    static std::string string;
    return string;
}

class Document {
    string& title;
    string* summary;

    Document() : title(EmptyStringThatLivesForever()), summary(NULL) {}
};

但是我怀疑这样的技巧会在任何严肃的代码审查中存在。

真正的解决方案是摆脱参考:

class Document {
    string title;
    string* summary;

    Document() : title(""), summary(NULL) {}
};