Luk*_*mit 19 c++ pointers c++11
我有一个关于c ++ 11指针的问题.具体来说,如何将基类的唯一指针转换为派生类?
class Base
{
public:
int foo;
}
class Derived : public Base
{
public:
int bar;
}
...
std::unique_ptr<Base> basePointer(new Derived);
// now, how do I access the bar member?
Run Code Online (Sandbox Code Playgroud)
它应该是可能的,但我无法弄清楚如何.每次我尝试使用
basePointer.get()
Run Code Online (Sandbox Code Playgroud)
我最终得到了可执行文件崩溃.
在此先感谢,任何建议将不胜感激.
Cap*_*ous 38
如果它们是多态类型,并且您只需要指向派生类型的指针,请使用dynamic_cast
:
Derived *derivedPointer = dynamic_cast<Derived*>(basePointer.get());
Run Code Online (Sandbox Code Playgroud)
如果它们不是多态类型,则只需要指向派生类型的指针,static_cast
并希望获得最佳:
Derived *derivedPointer = static_cast<Derived*>(basePointer.get());
Run Code Online (Sandbox Code Playgroud)
如果需要转换unique_ptr
包含多态类型:
Derived *tmp = dynamic_cast<Derived*>(basePointer.get());
std::unique_ptr<Derived> derivedPointer;
if(tmp != nullptr)
{
basePointer.release();
derivedPointer.reset(tmp);
}
Run Code Online (Sandbox Code Playgroud)
如果需要转换unique_ptr
包含非多态类型:
std::unique_ptr<Derived>
derivedPointer(static_cast<Derived*>(basePointer.release()));
Run Code Online (Sandbox Code Playgroud)