好的,我在这里发生了一件奇怪的事。 (至少我认为这很奇怪,但我可能会犯一个根本性的错误)
所以,我有一个像这样的构造函数:
Module(const std::string& name) : m_name(name)
{
std::cout<<"Module String Constructor"<<std::endl;
std::cout<<"Constructed with name "<<m_name<<std::endl;
}
成员变量m_name如下所示:
const std::string& m_name;
我已经验证了构造函数被调用,并且m_name与这些控制台输出一起正确设置。
但是,当我尝试在将来某个时候使用以下方法检索名称时:
inline const std::string& GetName()
{
return m_name;
}
我得到一个零长度的空对象。
我可以通过从成员变量
中删除 const 和&amp; 说明符来使其正常工作我在这里缺少什么?
答案 0 :(得分:2)
但是我不能用字符串文字调用构造函数。
如果从字符串文字初始化对象,则将使用临时std::string
传递给Module
的构造函数。临时可以绑定到lvalue-reference-to-const,但它会在整个表达式之后立即销毁,之后成员引用m_name
变为悬空。从Module::GetName()
获取它并取消引用它会导致UB。
您可以使用命名变量来初始化对象;你还需要注意变量的生命周期。或者停止使用会员参考。