return EXIT_SUCCESS;
frommain()
と どこからでも呼び出すの違いexit(EXIT_SUCCESS)
を調べてみましたが、これまでに見つけた最高のリソースはSO のこの回答です。ただし、明確にしたい詳細が 1 つあります。
私にとって最も説得力のある反対意見はexit()
(その投稿で述べられているように)、ローカル スコープのオブジェクトに対してはデストラクタが呼び出されないということです。しかし、これは他のオブジェクトにとって何を意味するのでしょうか? exit()
メソッドからスタック上でかなり離れた別の場所から呼び出しmain()
ているが、その呼び出しのみを含み、変数を含まないブロック (メソッドであっても) 内にある場合はどうなりますか? スタックの他の場所にあるオブジェクトは引き続き破棄されますか?
私のユースケースはこれです:
「終了」コマンドが与えられるまでユーザーに入力を求めるアプリケーションがあります (テキストベースのアドベンチャー ゲーム)。これを実現する最も簡単な方法は、単に を呼び出すメソッドに「quit」をマップすることでしたexit(EXIT_SUCCESS)
。もちろん、ユーザーが実行できるすべてのアクションが、ゲームを続行するかどうかを示すブール値を返し、return false
終了したいときにだけ返すように書くこともできますが、これ以外で何かを返すのtrue
はこれだけですmethod -return true
回避したいという理由だけで、他のすべてのアクション メソッドが必要になりexit()
ます。一方、私は非常に多くのオブジェクトを作成し、非常に多くのメモリを動的に割り当てます。これらはすべて、クラス デストラクタによって処理される必要があるため、それらが実行されることが重要です。
ここでのベストプラクティスは何ですか? これは の良いケースですか、それともメソッドexit()
と同じくらい悪いケースですか?main