Aşağıdaki kod, çalışma zamanı hatasıyla sonuçlanır.başvuru sayımı shared_ptr içinde çalışmıyor.
Her bir shared_ptr
aynı belleğe sahiptir, ancak yine de her biri için bir sayıdır.
Bu nedenle, her paylaşılan işaretçi farklıdır, bu nedenle kapsam dışına çıktığında bloğu boşaltmaya çalışırlar ve bu da yığının bozulmasına neden olur. Sorum şu nasıl önlenir?
Sadece bunu beyan etmek zorunda olmayan tartışılabilir olduğunu bu
shared_ptr<int> x(p);
gibi beyanı eklemek istiyorum.
#include <iostream>
#include <memory>
using namespace std;
int main()
{
int* p = new int (10);
shared_ptr<int> a (p);
shared_ptr<int> b (p);
shared_ptr<int> c (p);
shared_ptr<int> d (p);
cout<<"Count : "<<a.use_count()<<endl;
cout<<"Count : "<<b.use_count()<<endl;
cout<<"Count : "<<c.use_count()<<endl;
cout<<"Count : "<<d.use_count()<<endl;
return 0;
}
'shared_ptr b = a;' vb? * Paylaşılan * işaretçisine sahip olmanın tek yolu budur, aksi halde yeni akıllı işaretçileri kullanamazsınız. –
Ayrıca, akıllı göstericilere sadece "kendi kendini saran işaretçiler" olarak değil, bunun yerine * sahiplik * açısından bakmanızı tavsiye ederim. Bir kaynak veya herhangi bir şey sadece bir seferde tek sahibi olabilir mi? Sonra 'std :: unique_ptr' kullanın. Bir kaynak veya şey birden fazla eşzamanlı sahip olabilir mi? Sonra 'std :: shared_ptr' kullanın. –
Son olarak, programlamada * hiçbir şey * "pazarlık yapılamaz" dır. Kullandığınız mevcut programlama dilinin veya çerçevenin özellikleri gereksinimlerinize uymuyorsa, ya gereksinimler veya dil/çerçeve değiştirilmelidir. –