Foo
何らかのリソースを保持する を考えてみましょう
struct Foo
{
~Foo();
};
およびグローバルstd::vector<Foo>
. ばかげた例かもしれませんが、問題をよく示しています。
std::vector<Foo> bar;
さて、プロセスはfork
s.
が子プロセスによってのみ変更される場合bar
は、子プロセス内で を呼び出すexit
のが適切です。を呼び出すと_exit
、Foo
bar 内の :s がリークします。bar
親が fork の前にいくつかのものを追加した場合、これらのオブジェクトは 2 回破棄される可能性があります。あるいは、これらは別のオブジェクトと見なす必要があるため、これは問題ではないかもしれません。
と一緒にオブジェクトの寿命を処理する適切な方法は何ですかfork
? この問題に対処する唯一の正気な方法は、子供exec
に最初からやり直させることですか?
プログラムのこの時点では、スレッドが 1 つだけであることが保証されていることに注意してください。