Как я могу избежать динамического выделения, когда мне нужен полиморфизм?
С 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
будет жить до тех пор, пока targetInterface
используется.