class Base {
public:
virtual void f() const { std::cout << "Base::f()" << std::endl; }
};
class Derived : public Base {
public:
void f() const { std::cout << "Derived::f()" << std::endl; }
};
int main()
{
Base* obj = new Derived;
std::shared_ptr<Base> sp = std::make_shared<Base>(*obj);
sp->f(); //prints Base::f()
}
我期望的是sp->f()列印Derived::f(),就像帶有虛擬方法的原始指標一樣。具有多型行為的正確方法是什么std::shared_ptr?
uj5u.com熱心網友回復:
sp指向型別的實體Base,而不是Derived. 您不能像這樣使用指向基的指標來克隆派生類。
std::shared_ptr<Base> sp = std::make_shared<Derived>();會作業。... =std::make_shared<Derived>(std::dynamic_cast<Derived&>(*obj))也可以作業;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/419346.html
標籤:
