Мне пришлось тяжело отлаживать крах при производстве. Просто хотел подтвердить, что у нас здесь семантика. У нас есть класс вроде...
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;
};
Но код внезапно начал сбой! Я выделил длинный список inits для этого фрагмента кода m_str(m_str)
. Я подтвердил это через текст ссылки.
Нужно ли это терпеть крах? Что говорит об этом стандарт? (Это поведение undefined?)