std::shared_ptrを噛ませても、親クラスに子クラスのオブジェクト突っ込める
「あれ?これOKだったっけ?」という話の確認で、具体的には「Baseを継承したDerivedのshared_ptrをBaseのshared_ptrに入れれたっけな?」という。
よく考えると、これが出来ないとshared_ptr使って動的多態できなくなるので、出来て当たり前か…
↓サンプルコード、ちゃんと代入出来てる&コンパイル通る&欲しい結果になる。
#include <iostream> #include <memory> //適当な継承関係のあるクラス class Base { public: void sayHello(){ std::cout << "Hello" << std::endl; } }; class Derived : public Base{}; //Baseを引数にhelloと言わせる関数 void sayHello(const std::shared_ptr<Base> & b){ b->sayHello(); } //main int main() { std::shared_ptr<Base> b(std::make_shared<Base>()); std::shared_ptr<Derived> d(std::make_shared<Derived>()); sayHello(b); sayHello(d); return 0; }