Возможно, но довольно низкого уровня.
Джеймс адекватно рассмотрел код C ++ 03, сделай сам, поэтому позвольте мне представить альтернативы.
Во-первых, в C ++ 03 у вас есть две альтернативы с Boost:
- Boost.Optional :
boost::optional<MyClass>
, что, как следует из названия, позволяет иметь (или нет) экземпляр типа.
- Boost.Variant :
boost::variant<SomeClass,OtherClass,YetAnotherClass>
, который является разновидностью union
с безопасной семантикой типа и гарантированными вызовами конструкторов / деструкторов.
Во-вторых, в C ++ 11 была введена std::aligned_storage<Len,Align>
, которая принимает два параметра:
- необходимое количество байтов для хранения
- Требуется выравнивание
Он использует тёмную магию компилятора, чтобы гарантировать, что выравнивание выполнено, поэтому он является хорошей основой для создания процедур манипуляции с необработанной памятью.
Лично я бы выбрал boost::optional
в вашем случае:
boost::optional<MyClass> Arena[256];
это моделирует именно то, что вы хотите, потому что по умолчанию boost::optional
создается пусто .