Как я могу избежать динамического выделения, когда мне нужен полиморфизм?

С GCC на Ubuntu 14.04 и следующим MCVE:

class TargetInterface
{
public:
   ~TargetInterface();
   //
   DataBuffer retDataBuffer();
   // following methods are all pure virtual
   virtual void delay() = 0;
   // ...
protected:   
   DataBuffer dataBuffer;
}

class FlashTarget : public TargetInterface
{
   public:
   void delay() override;
   // ...
}   

// globals
TargetInterface * targetInterface;

void main()
{
    targetInterface = new FlashTarget; // <--
    // ...
    // etc.
}

FlashTarget происходит от TargetInterface а также targetInterface динамически распределяется в main(),

Есть ли способ избежать динамического выделения кода выше?

1 ответ

Решение

Это был бы наивный ответ:

void main()
{
    FlashTarget target;
    targetInterface = &target;
}

Примечание: при таком подходе вы должны убедиться, что target будет жить до тех пор, пока targetInterface используется.

Другие вопросы по тегам