2

Foo何らかのリソースを保持する を考えてみましょう

struct Foo
    {
    ~Foo();
    };

およびグローバルstd::vector<Foo>. ばかげた例かもしれませんが、問題をよく示しています。

std::vector<Foo> bar;

さて、プロセスはforks.

が子プロセスによってのみ変更される場合barは、子プロセス内で を呼び出すexitのが適切です。を呼び出すと_exitFoobar 内の :s がリークします。bar親が fork の前にいくつかのものを追加した場合、これらのオブジェクトは 2 回破棄される可能性があります。あるいは、これらは別のオブジェクトと見なす必要があるため、これは問題ではないかもしれません。

と一緒にオブジェクトの寿命を処理する適切な方法は何ですかfork? この問題に対処する唯一の正気な方法は、子供execに最初からやり直させることですか?

プログラムのこの時点では、スレッドが 1 つだけであることが保証されていることに注意してください。

4

2 に答える 2