Aşağıdaki kodu dikkate alın.Paylaşılan_ptr ile bellek sızıntısı nasıl önlenir?
using boost::shared_ptr;
struct B;
struct A{
~A() { std::cout << "~A" << std::endl; }
shared_ptr<B> b;
};
struct B {
~B() { std::cout << "~B" << std::endl; }
shared_ptr<A> a;
};
int main() {
shared_ptr<A> a (new A);
shared_ptr<B> b (new B);
a->b = b;
b->a = a;
return 0;
}
hiçbir çıkışyoktur. Hayır desctructor denir. Bellek sızıntısı. Her zaman akıllı göstericinin bellek sızıntılarından kaçınmasına yardımcı olduğuna inanıyorum.
Sınıflarda çapraz referanslara ihtiyacım varsa ne yapmalıyım?
@Alexey, girişte bu sorunun açık bir şekilde uyarıldığı dokümanlar için bir bağlantı. http://www.boost.org/doc/libs/1_41_0/libs/smart_ptr/shared_ptr.htm – Glen
Hangisi? Ve neden zayıf referanslarla ikisini de değiştirmiyorsunuz? Bu gülünç. 'shared_ptr 'bir nedenden ötürü kullanıldı. – curiousguy
@curiousguy: Sorunuzu anladığımdan emin değilim: gülünç olmak için neler buluyorsunuz? Bir döngüyü kırmak için, _one_ güçlü referansı zayıf bir referansla değiştirmeniz gerekir; hangisi tamamen kullanım durumuna bağlıdır. Tüm güçlü referansları zayıf referanslarla değiştiremezsiniz, çünkü hiçbir eşya kalmamış olduğundan tüm nesneler imha edilir. –