はじめまして、山田と申します。
C++いじり初めて半年がたった初級者です。よろしくお願いします!
Pascalだと、
obj := THoge.create;
try
if IsValid then
exit;
if IsHoge then
exit;
Showmessage('hoge');
finally
obj.free;
end;
というような、クリーンアップコードというのがありますがCではないですよね。
どうも不便でしかたありません。そこんとこをうまく書くのが上級者なんですが、
みなさんは、関数内で最後に必ず実行しなければならないコードがある場合は
どのようにされてますか?
(関数の最後にFINALLY:などとラベルを置こうかとかも考えました。
が、goto文を使うと、その後にSTLのiteratorを使うとコンパイルできなかったりしました。
あとは別関数に切り出すとかですかね??)
C言語でクリーンアップコード?
Re:C言語でクリーンアップコード?
CなんだかC++なんだか……。
C++の例外機構にはtry/catchはあるもののfinallyはありません。
しかし,デストラクタによる確定的な破棄が保障されています。
これらの特性から,C++では広義のスマートポインタを使ってリソースを管理します。
「RAII」あたりをキーに調べてみると良いでしょう。
で,C言語には例外機構がないですから,setjmp/longjmpを除いて,関数からの脱出方法はreturnのみになります。
よって,returnの箇所でgotoする方法で,十分なクリーンアップ処理が可能です。
C++の例外機構にはtry/catchはあるもののfinallyはありません。
しかし,デストラクタによる確定的な破棄が保障されています。
これらの特性から,C++では広義のスマートポインタを使ってリソースを管理します。
「RAII」あたりをキーに調べてみると良いでしょう。
で,C言語には例外機構がないですから,setjmp/longjmpを除いて,関数からの脱出方法はreturnのみになります。
よって,returnの箇所でgotoする方法で,十分なクリーンアップ処理が可能です。
Re:C言語でクリーンアップコード?
返信ありがとうございました。
なるほど!
setjmp/longjmpなど、トリッキーな情報ありがとうございました!
なんとか頑張ってみます!
なるほど!
setjmp/longjmpなど、トリッキーな情報ありがとうございました!
なんとか頑張ってみます!