-9

次に例を示します。

template<typename T>
struct smart { //Smart Pointer class
    smart();
    ~smart();
    smart(const smart& copy);
    T* target;
    int count;
};

struct atest {
    smart<atest> next;
};

void Garbage() {
    smart_ptr<atest> Test=smart<atest>(new atest);
//Test.count == 1
    Test->next=Test;
//Test.count == 2
//Test.target == Test->next.target
}
//Test.count == 1
//Test'll never be deleted! because it contains itself.

int main() {
    for (int i=0;i<10000000;i++) {
        Garbage();
    }
}

メソッドの終了Test後に自分自身を削除するという解決策はありますか? Garbageそして、ここで別の質問です。スマート ポインターには別の穴がありますか?

4

1 に答える 1

2

あなたの質問は非常に漠然としていますが、循環参照に関するものだと思います。そのようなことを避けるために、「弱い」スマートポインターを使用する必要があります。ここで、weak_ptr を使用してサイクルを中断する方法について詳しく読むことができます。

于 2012-09-05T11:46:42.483 に答える