我很难调试生产崩溃。只是想在这里与人们确认语义。我们有一类像...Ctor初始化程序:自初始化会导致崩溃?
class Test {
public:
Test()
{
// members initialized ...
m_str = m_str;
}
~Test() {}
private:
// other members ...
std::string m_str;
};
有人更改为使用构造函数初始化,列出这是我们的代码语义内合理正确的初始化。初始化的顺序及其初始值是正确的。所以班级看起来像...
class Test {
public:
Test()
: /*other inits ,,, */ m_str(m_str)
{
}
~Test() {}
private:
// other members ...
std::string m_str;
};
但是代码突然开始崩溃!我将这个长长的列表分隔到这段代码m_str(m_str)
。我通过link text确认了这一点。
它是否有崩溃?标准对此有何评论? (它是未定义的行为?)
您正在初始化m_str与自己?你为什么做这个? – Starkey 2010-10-08 15:43:11
未定义的行为意味着它可以格式化您的c盘并安装另一个操作系统。没有人知道什么特定的“未定义的行为”意味着特定的环境。 – 2010-10-08 15:44:08
别人的代码,我会改变它,但需要从标准确认它确实是未定义的行为,因为它不会崩溃像POD类型'int我;我(i)'在初始化列表中 – Abhay 2010-10-08 15:46:14