如何将具体的类对象从shared_ptr获取到抽象类对象



我有从抽象类派生的对象的shared_ptrs向量

std::vector<std::shared_ptr<Abstract>> objects;

以下操作失败:

Concrete* c = objects[0].get()

跟:

error: invalid conversion from ‘Abstract*’ to ‘Concrete*

如何访问具体类型的对象

如果必须获取指向派生类的指针,请使用dynamic_cast

Concrete* c = dynamic_cast<Concrete*>(objects[0].get());
if ( c != nullptr )
{
// Use c
}

如果只需要访问成员函数或成员变量,而不需要访问指针本身,则可以使用std::dynamic_pointer_cast

auto cptr = std::static_pointer_cast<Concrete>(objects[0]);
if ( cptr )
{
// Use cptr
}

使用std::dynamic_pointer_cast也具有与使用智能指针时相同的好处。

相关内容

最新更新