Да, это проблематично.У вас просто нет гарантии, что память выровнена должным образом.
Хотя существуют различные приемы для получения хранилища с правильным выравниванием, лучше всего использовать Boost или C ++ 0x aligned_storage
, которые скрывают эти приемы отyou.
Тогда вам просто нужно:
// C++0x
typedef std::aligned_storage<sizeof(my_class),
alignof(my_class)>::type storage_type;
// Boost
typedef boost::aligned_storage<sizeof(my_class),
boost::alignment_of<my_class>::value>::type storage_type;
storage_type storage; // properly aligned
new (&storage) my_class(); // okay
Обратите внимание, что в C ++ 0x, используя атрибуты, вы можете просто сделать это:
char storage [[align(my_class)]] [sizeof(my_class)];