(Visual Studio 2010'u Kullanma) Projemde var olan bir sınıfın bir paylaşımlı_ptr'si oluşturmaya çalışıyorum (std :: shared_ptr önce bir on yıl yazıldı). Bu sınıf, bir const olmayan işaretçiyi başka bir nesneye alır, boş parametre yapıcısı özeldir. Ben buna bir Shared_ptr oluşturmaya çalıştığınızdashared_ptr yapmaya çalışırken std :: make_shared() hataları?
class Foobar {
public:
Foobar(Baz* rBaz);
private:
Foobar();
}
, işler yolunda gitmez:
VS2010 üzerindeBaz* myBaz = new Baz();
std::shared_ptr<Foobar> sharedFoo = std::make_shared<Foobar>(new Foobar(myBaz));
, işte bu görünen Nedense bana
error C2664: 'Foobar::Foobar(const Foobar &)' : cannot convert parameter 1 from 'Foobar *' to 'const Foobar &'
3> Reason: cannot convert from 'Foobar *' to 'const Foobar'
verir Baz*
alır yapıcı yerine Foobar
kopya kurucusunu çağırıyor. Ayrıca, cannot convert from 'Foobar *' to 'const Foobar'
bölümünden de emin değilim. En iyi yorumum, shared_ptr<Foobar>
numaralı şablonumun yanlış olmasıdır. shared_ptr<Foobar*>
yaptım ama bu yanlış görünüyor, gördüğüm tüm örnekler tür bir ham işaretçi yapmayın.
Bu, shared_ptr<Foobar*>
herşeyi düzgün bir şekilde derler, ancak Foobar
nesnesinin kapsam dışına çıkması durumunda düzgün şekilde silinmesini engeller mi?
Düzenleme: Bu ilgili görünen, ama Boost kullanmıyorum: Ben make_shared()
kullanıyorum neden benim gerçek kod sharedFoo
yılında, merak ediyorsanız eğer, Anlaşılır olması için: boost make_shared takes in a const reference. Any way to get around this?
Edit2 değişken, bir üçüncü sınıfın (Foobar
ve Baz
'dan bağımsız) bir sınıf üyesidir.
Atm'ı test edemiyorum, fakat bu olmamalı; std :: shared_ptr sharedFoo = std :: make_shared (myBaz); –
Ah! Bu hile yaptı ... görünüşe göre 'make_shared() 'sizin için şablon yazılan türünü çağırır, bu yüzden' yeni 'bir nesneye geçmemeliydim. Teşekkürler! Bir cevap olarak tekrar söyleyin ve doğru olarak işaretleyeceğim. –
Bitti, kendim test edildikten sonra :) –