2014-07-26 50 views
9
Ben

Türetilmiş bir sınıf nasıl yapılır?

class Base { 
    public: 
    typedef std::shared_ptr<Base> Ptr; 
}; 

class Derived : public Base {}; 

Base::Ptr myPtr = std::make_shared(/* Derived() */); 

Nasıl böyle bir nesne oluşturmak için make_shared tell aşağıda gibi türetilmiş bir sınıf ile make_shared<T> fonksiyonunu kullanmak istiyorum

?

ben make_shared fonksiyonunda tek alloc yararlanabilmek için klasik

Base::Ptr ptr = Base::Ptr(new Derived()); 

önlemek istiyorum.

cevap

19

std::shared_ptr bir shared_ptr<Derived> bir shared_ptr<Base> yapabilir dönüştürme yapıcı vardır, bu nedenle şu çalışmalıdır:

#include <memory> 
class Base { 
    public: 
    typedef std::shared_ptr<Base> Ptr; 
}; 
class Derived : public Base {}; 

int main() { 
    Base::Ptr myPtr = std::make_shared<Derived>(); 
} 
İlgili konular