shared_ptr sihirli :)
Mr. Lidström and me had an argument :)
Bay Lidström iddiası inşa a shared_ptr<Base> p(new Derived);
Temel sanal bir yıkıcı olmasını gerektirmez
Armen Tsirunyan: "Gerçekten mi? Olacakshared_ptrdoğru temizlemek mi? Bu durumda bu yöndeki uygulanabilir gösterilmektedir misiniz?"
Daniel Lidström: "shared_ptrkendi yıkıcı Somut örneğini silmek için kullanır. Bu C toplum içinde DEMİRYOLU olarak bilinir. Benim tavsiyem DEMİRYOLU hakkında olabildiğince tüm öğrenin. Tüm durumlarda DEMİRYOLU kullandığınızda, C kodlama çok daha kolay hale getirecek."
Armen Tsirunyan: "DEMİRYOLU biliyorum, Ve ben de sonundashared_ptryıkıcı pn 0 ulaştığında saklı px silebilir. Ama eğer px
Base
statik tip işaretçi veBase
sanal bir yıkıcı olmadığı sürece 4**, o zaman dinamik türü işaretçi olsaydı, bu tanımsız davranışlara neden olur. Eğer yanılıyorsam beni düzeltin."Daniel Lidström: "shared_ptrstatik tip Beton olduğunu bilir. Kurucusu ben öldüğünden beri bu bilir! Anlaşılan büyü gibi biraz, ama bir planıdır sizi temin ederim son derece güzel."
Bu yüzden bizi yargılama. Nasıl mümkün eğer varsa) uygulamaktırshared_ptrpolimorfik sınıfları sanal olması gerekmeden yıkıcı? Şimdiden teşekkürler
CEVAP
Evet, mümkün shared_ptr bu şekilde uygulamak gerekiyor. Mu artıran ve önümüzdeki standart da bu davranışı gerektirir. İlave bir esneklik olarak shared_ptr daha sadece bir başvuru daha karşı yönetir. Sözde bir deleter genellikle de referans sayaçları içeren aynı bellek bloğu içine konur. Ama eğlenceli kısmı bu deleter türü shared_ptr türü bir parçası değildir. Bunun adı "türü silme" ve temelde aynı tekniği uygulamak için "polimorfik işlevleri" boost::fonksiyon veya std::function (C 0) gizlediği gerçek functor türü. Örnek çalışma yapmak için şablonu esas alan bir kurucu ihtiyacımız var:
template<class T>
class shared_ptr
{
public:
...
template<class U>
explicit shared_ptr(U* ptr);
...
};
Bu ve derslerin Temel kullanın ve Türetilmiş ...
class Base {};
class Derived : public Base {};
int main() {
shared_ptr<Base> sp (new Derived);
}
... U ile şablon oluşturucu=Türetilmiş shared_ptr oluşturmak için kullanılan nesne. Yapıcı böylece uygun deleter nesne ve referans sayaçlar ve veri depolayan bir üyesi olarak bu denetim bloğu için bir işaretçi oluşturmak için şansı var. Eğer referans sayacı sıfıra ulaştığında, önceden oluşturulmuş ve Elde edilen farkında deleter nesne imha etmek için kullanılır.
Neden Python 3.x'In super() sihir...
Neden python 'sihirli yöntemler m...
'in Haskell ($) sihirli bir opera...
Boost kullanırken olası tehlikeleri ne...
Sihirli Joker Alt etki alanı ve Statik...