Вот пример:
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?
Ваш вопрос очень расплывчатый, но я думаю, что речь идет о циклических ссылках, вы должны использовать «слабые» умные указатели, чтобы избежать таких. Вы можете прочитать больше о том, как прерывать циклы, используя weak_ptr. Вот.
Других решений пока нет …