我很難調試生產崩潰。只是想在這裏與人們確認語義。我們有一類像...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