、私はいくつかのテストを行った:std :: exitリークメモリを使用できますか?私の質問に答えるために
(以下を複製することは必要である含まれます)
#include <cstdlib>
#include <memory>
私はmain
機能でstd::unique_ptr
で、std::exit
と呼ばれる機能を作りました。
void some_function()
{
std::exit(EXIT_SUCCESS);
}
int main()
{
std::unique_ptr<int> relying_on_raii{new int{5}};
}
私はunique_ptr
宣言の後some_function
と呼ばれる場合は、メモリがリークする可能性があります。
1 potential leak(s) (suspected false positives)
[…]
6 unique, 6 total, 797 byte(s) of still-reachable allocation(s)
対としては第7電位漏れが発生した第二の例では、見ることができ、
1 potential leak(s) (suspected false positives)
[…]
7 unique, 7 total, 801 byte(s) of still-reachable allocation(s)
た:
2つのログは、私は、次の行が異なっDr. Memoryから得4バイトのサイズ。これはちょうどint
のサイズです。私はこのテストを二重で繰り返したが、実際にはでテストで805 byte(s)
となった。
安全な機能を使用する場合はstd::exit
ですか、またはメモリリークを防ぐために常にメインから戻す必要がありますか?
あなたが 'exit'を呼んでいるのであれば、依然として漏れは大きな懸念ですか?スタックが巻き戻されるのを気にするならば。 'main'だけがキャッチできる例外を投げます。 – StoryTeller
@StoryTeller私はプログラムを終了する通常の方法としてstd :: exitを使いたいと思っています。戻り値を3回呼び出し、bool値のチェックをして、再実行するかどうかを判断するのは 'std: :exit'。 'スロー'は面白い考えですが、成功した出口を捨てるためのハックのように思えます。 – kim366
プログラムが終了したら、何が漏れていますか? OSがプロセスをクリーンアップします。 – NathanOliver