Paylaşılan işaretçileri tutan vector.clear() öğesini çağırdıktan sonra, shared_ptr tarafından sahip olunan nesnenin yıkıcılarının serbest bırakılmayacağını fark ettim.Paylaşılan işaretçiler vektörü, vektör temizlendikten sonra bellek sorunları
Kod örneği aşağıda görülebilir. Vector.clear() çağrılırken bile, paylaşılan işaretçiden sonra adı geçen yıkıcı, kapsamın ötesine geçer. Benim sorum onları sıfırlamak suretiyle vektör içindeki tüm akıllı işaretçileri silmek zorunda mıyım? Tavsiye edebileceğiniz daha kolay bir yolu var mı?
Output :
constructor
I am here
destructor
Code:
#include <vector>
#include <iostream>
#include <memory>
using namespace std;
class A
{
public:
A(){cout << "constructor" << endl;};
~A(){cout << "destructor" << endl;};
};
int main()
{
shared_ptr<A> sharedptr (new A);
std::vector<shared_ptr<A> > test;
test.push_back(sharedptr);
test.clear();
cout << "I am here" << endl;
}
Cevabınız sadece aradığım şey. Çok teşekkürler. –
Soruda gösterilen durumda bunu eklemeliyim ki, kullanım sırasında tehlikeli olabilecek kullanımı kolay bir değişken ('sharedptr') kullanmaktan kaçınmak için, vektörü vektörte 'emplace_back' ile oluşturmayı tercih ederim. 'std :: move'. – us2012