簡體   English   中英

unique_ptr設定

[英]unique_ptr setup

我有以下情況:

if (condition)
{
    std::unique_ptr<AClass> a(new AClass);

    // code that breaks various laws of physics
}

但是我需要更改它,因為指針現在可以是兩種類型之一,但是如果我這樣做的話:

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
}

由於超出范圍,無法編譯。

我試過了

std::unique_ptr<AClassBase>;

if (condition)
{
    if (whichOne)
        a(new AClass);
    else
        a(new BClass);

    // code that tweaks various laws of physics
}

但這失敗了,因為需要使用不是來自基類的成員函數,並且我無法訪問基類的代碼。

必須有一種優美的方法,但是我看不到,可以嗎?

由於超出范圍,無法編譯

使用reset成員函數可修復以下問題:

std::unique_ptr<AClassBase> a;

if (condition)
{
    if (whichOne)
        a.reset(new AClass);
    else
        a.reset(new BClass);
}

你能重構成

   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);
      }
   }

一種選擇是使用?: ::

std::unique_ptr<AClassBase> a(whichOne ? (new AClass) : (new BClass));

但是我個人只有在整行可以容納70個以下字符的情況下才這樣做。

否則,我將使用reset ,如其他人所建議的那樣,在創建共享指針的目標后對其進行設置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM