Bay Lidström ve ben tartıştık :)
Bay Lidström'ün iddiası, bir yapının Base'in shared_ptr<Base> p(new Derived);
sanal bir yıkıcıya sahip olmasını gerektirmediğidir:
Armen Tsirunyan : "Gerçekten Will Shared_ptr ? Eğer etkileyen nasıl yansıdığını gösteren bu durumda lütfen Could doğru temizlemek"
Daniel Lidström : " shared_ptr , Concrete örneğini silmek için kendi yıkıcısını kullanır. Bu, C ++ topluluğu içinde RAII olarak bilinir. Benim tavsiyem, RAII hakkında öğrenebileceğiniz her şeyi öğrenmenizdir. Kullandığınızda C ++ kodlamanızı çok daha kolay hale getirecektir. Her durumda RAII. "
Armen Tsirunyan : " RAII'yi biliyorum ve sonunda, paylaşılan_ptr yıkıcısının, pn 0'a ulaştığında depolanan px'i silebileceğini de biliyorum. Ama eğer px statik tip işaretçisi
Base
ve dinamik tip işaretçisi varsaDerived
, o zamanBase
sanal bir yıkıcı yoksa , bu tanımlanmamış davranışlara neden olur. Hatalıysam düzeltin. "Daniel Lidström : " shared_ptr statik tipin Beton olduğunu biliyor. Bunu yapıcısında geçtiğimden beri biliyor! Biraz sihir gibi görünüyor, ancak tasarım gereği ve son derece güzel olduğunu size temin ederim."
Bizi yargıla. Polimorfik sınıfların sanal yıkıcıya sahip olmasını gerektirmeden paylaşılan_tr'yi uygulamak (eğer öyleyse) nasıl mümkün olabilir ? Şimdiden teşekkürler