У меня есть легкий шаблонный класс, который содержит пару объектов-членов, которые используются очень редко, и поэтому я хотел бы избегать вызова их конструкторов и деструкторов, за исключением тех редких случаев, когда я фактически их использую.
Для этого я «объявляю» их в своем классе следующим образом:
template <class K, class V> class MyClass
{
public:
MyClass() : wereConstructorsCalled(false) {/* empty */}
~MyClass() {if (wereConstructorsCalled) MyCallPlacementDestructorsFunc();}
[...]
private:
bool wereConstructorsCalled;
mutable char keyBuf[sizeof(K)];
mutable char valBuf[sizeof(V)];
};
... и затем я использую размещение новых и удаление размещения, чтобы устанавливать и разрушать объекты только тогда, когда мне это действительно нужно.
Читая FAQ по C ++, он сказал, что при использовании нового размещения мне нужно быть осторожным, чтобы размещение было правильно выровнено, иначе у меня возникнут проблемы.
У меня вопрос, будут ли массивы keyBuf и valBuf правильно выровнены во всех случаях, или мне нужно предпринять какой-то дополнительный шаг, чтобы убедиться, что они выровнены правильно? (если так, то не зависящий от платформы шаг был бы предпочтительным)