Ctor Initializer: a auto-inicialização causa falha?
Foi difícil depurar uma falha na produção. Só queria confirmar com o pessoal aqui sobre a semântica. Temos uma classe como ...
class Test {
public:
Test()
{
// members initialized ...
m_str = m_str;
}
~Test() {}
private:
// other members ...
std::string m_str;
};
Alguém mudou a inicialização para usar listas de inicialização do ctor, o que é razoavelmente correto na nossa semântica de códigos. A ordem de inicialização e seu valor inicial estão corretos, entre outras coisas. Então a classe parece ...
class Test {
public:
Test()
: /*other inits ,,, */ m_str(m_str)
{
}
~Test() {}
private:
// other members ...
std::string m_str;
};
Mas o código de repente começou a falhar! Eu isolei a longa lista de inits nesse pedaço de códigom_str(m_str)
. Confirmei isso viaTexto do link.
Tem que travar? O que o padrão diz sobre isso? (É um comportamento indefinido?)