Ste*_*fan 1 c++ unique-ptr c++11
我有以下情况:
if (condition)
{
std::unique_ptr<AClass> a(new AClass);
// code that breaks various laws of physics
}
Run Code Online (Sandbox Code Playgroud)
但我需要更改它,因为指针现在可以是两种类型中的一种,但如果我这样做:
if (condition)
{
if (whichOne)
std::unique_ptr<AClass> a(new AClass);
else
std::unique_ptr<AClass> a(new BClass);
// code that fixes various laws of physics
}
Run Code Online (Sandbox Code Playgroud)
它无法编译为超出范围.
我试过了
std::unique_ptr<AClassBase>;
if (condition)
{
if (whichOne)
a(new AClass);
else
a(new BClass);
// code that tweaks various laws of physics
}
Run Code Online (Sandbox Code Playgroud)
但这失败了因为需要使用成员函数而不是来自基类,并且我无法访问基类的代码.
必须有一个优雅的方式,但我看不到它,你呢?
它无法编译为超出范围
使用reset成员函数来修复:
std::unique_ptr<AClassBase> a;
if (condition)
{
if (whichOne)
a.reset(new AClass);
else
a.reset(new BClass);
}
Run Code Online (Sandbox Code Playgroud)
你能反思一下吗?
std::unique_ptr<AClassBase> base;
if( condition )
{
if(whichone)
{
std::unique_ptr<AClass> a(new AClass);
// Break laws of physics with an AClass
base = std::move(a);
}
else
{
std::unique_ptr<BClass> b(new BClass);
// Break laws of physics with an BClass
base = std::move(b);
}
}
Run Code Online (Sandbox Code Playgroud)