我很难调试生产中的崩溃。只是想与这里的人确认语义。我们有一个像...
class Test {
public:
Test()
{
// members initialized ...
m_str = m_str;
}
~Test() {}
private:
// other members ...
std::string m_str;
};
有人将初始化更改为使用 ctor 初始化列表,这在我们的代码语义中是相当正确的。初始化的顺序和它们的初始值是正确的。所以这个类看起来像......
class Test {
public:
Test()
: /*other inits ,,, */ m_str(m_str)
{
}
~Test() {}
private:
// other members ...
std::string m_str;
};
但是代码突然开始崩溃!我将一长串初始化列表与这段代码隔离开来m_str(m_str)
。我通过链接文本确认了这一点。
它必须崩溃吗?标准对此有何评论?(这是未定义的行为吗?)