У меня есть код, подобный приведенному ниже:
class BaseException : public std::exception {
private:
string myexception;
public:
BaseException(string str):myexception(str){}
virtual const char* what() const throw() { return myexception.c_str();}
string getMyexceptionStr() { return myexception};
}
class CustomException1 : public std::exception {
public:
CustomException1(string str):BaseException("CustomException1:"+str){}
virtual const char* what() const throw() { return getMyexceptionStr().c_str();}
}
class CustomException2 : public std::exception {
public:
CustomException2(string str):BaseException("CustomException2:" + str){}
virtual const char* what() const throw() { return getMyexceptionStr().c_str();}
}
void TestException1(){
throw CustomException2("Caught in ");
}
void TestException2(){
throw CustomException2("Caught in ");
}
int main(){
try{
TestException1();
}
catch(BaseException &e){
cout << e.what();
}
try{
TestException2();
}
catch(BaseException &e){
cout << e.what();
}
}
Всякий раз, когда я запускаю это, я получаю код ниже
▒g▒▒▒g▒▒Exception1: Оказывается в
▒g▒▒▒g▒▒EException2: пойман в
Я возвращаю переменную-член в том же контексте класса, область должна быть существующей, но все же я получаю ненужные символы.
Каков наилучший способ справиться с этим, чтобы избежать нежелательных символов?
Из-за некоторых ограничений я не могу использовать malloc или strdup при возврате исключения