この行がぶら下がっているポインタを作成するのだろうか:
string arg="derp";
throw std::runtime_error("Unknown argument "+arg);
std::runtime_error
をコピーしますかstring
、それとも参照を保存しますか?
std::exception
(std::runtime_error
継承元)は、標準で明示的に呼び出されていなくても(私が見つけることができる)、メッセージのコピーを作成する必要があります。一般的なケースでは、クラスがメッセージexception
のソースがそれよりも長く存続することを期待する理由はありません。what()
文字列参照を取ります。それを参照として catch ブロックに渡しますが、文字列リテラルをコンストラクターに渡すと、一時文字列オブジェクトが作成されます。また、文字列リテラルで + arg を実行しないでください。これは構文エラーです。
ポインタはどこですか?文字列リテラルをコピーしconst std::string&
、実行時エラーを作成するときに暗黙的にキャストしています。