Умный указатель не достаточно умен

Вот пример:

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 конец метода?
И вот еще один вопрос, есть ли еще дыры в Smart Pointers?

-8

Решение

Ваш вопрос очень расплывчатый, но я думаю, что речь идет о циклических ссылках, вы должны использовать «слабые» умные указатели, чтобы избежать таких. Вы можете прочитать больше о том, как прерывать циклы, используя weak_ptr. Вот.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]