我有一个轻量级模板类,其中包含几个很少使用的成员对象,因此我想避免调用它们的构造函数和析构函数,除非在我实际使用它们的极少数情况下。
为此,我在课堂上像这样“声明”它们:
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)];
};
...然后我使用placement new 和placement delete 来设置和拆除对象,仅当我真正需要这样做时。
阅读 C++ 常见问题时,它说在使用新位置时,我需要注意位置是否正确对齐,否则我会遇到麻烦。
我的问题是,keyBuf 和 valBuf 数组是否在所有情况下都正确对齐,或者我需要采取一些额外的步骤来确保它们正确对齐?(如果是这样,一个不依赖于平台的步骤会更好)