unique_ptr设置

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)

但这失败了因为需要使用成员函数而不是来自基类,并且我无法访问基类的代码.

必须有一个优雅的方式,但我看不到它,你呢?

Max*_*kin 5

它无法编译为超出范围

使用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)


Dav*_*e S 5

你能反思一下吗?

   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)