boost::/std::shared_ptr
, kendi deleterlerini silme avantajına sahip olduğundan,Eğer her zaman bir share_ptr içinde saklarsanız, Arayüzünüz için gerekli sanal bir yıkıcı mıdır?
#include <memory>
typedef std::shared_ptr<void> gc_ptr;
int main(){
gc_ptr p1 = new int(42);
gc_ptr p2 = new float(3.14159);
gc_ptr p3 = new char('o');
}
gibi güzel şeyler yapabilirsiniz. Ve bu, kaydedilmekte olan doğru delet sayesinde tüm işaretçileri doğru şekilde silecektir.
Arayüzünüzün her uygulamasının her zaman shared_ptr<Interface>
(veya make_shared<Interface>
) ile oluşturulmasını sağlarsanız, aslında bir virtual
destructor'ına ihtiyacınız var mı? Xzx22'yi yine de beyan ederim, ama sadece bilmek istiyorum, çünkü shared_ptr
her zaman başlatılan türü silecektir (başka bir özel deleter verilmedikçe).
olası bir kopyası [shared_ptr magic:)] (http://stackoverflow.com/questions/3899790/shared-ptr-magic) –
@Armen: Bu bir kopya değil, nasıl 'shared_ptr' komutunu sormuyor; bu, ama sanal bir yıkıcı kullanmanız gerekip gerekmediğini * * bilmek '' shared_ptr' bu sihiri yapar. –
@David: Hayır, yapmıyor. Zaten bir sanal yıkıcı kullanacağını söylüyor. Birine sahip olmamanın sorun olup olmadığını soruyor. Yani bu bir kopya –