Eu estava casualmente fazendo alguns desafios no HackerRank e me deparei com "Código Herdado", que tentei resolver com isso:
class BadLengthException : public exception {
private:
const char* message;
public:
BadLengthException(int n_) {
this->message = to_string(n_).c_str();
}
const char * what() const throw() {
return this->message;
}
};
Como não funcionou (a saída estava vazia), pesquisei no SO o motivo e encontrei esta pergunta sobre o mesmo problema. Acho que entendo a solução proposta, mas ainda estou muito confuso sobre minha tentativa:
Entendo que a string to_string(n_).c_str()
pode ser vista como uma variável local, como no exemplo da pergunta mencionada, mas por que ainda é tratada como tal quando what()
é chamada? Não deveria ter sido mantido message
via inicialização, estando disponível sempre que chamar what()
?