Có, nó có vấn đề. Bạn chỉ đơn giản là không có đảm bảo rằng bộ nhớ được căn chỉnh đúng cách.
Trong khi các thủ thuật khác nhau tồn tại để có được lưu trữ với sự liên kết thích hợp, tốt nhất bạn nên dùng Boost's hoặc C++ 0x's aligned_storage
, ẩn các thủ thuật này khỏi bạn.
Sau đó, bạn chỉ cần:
// 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
Lưu ý rằng trong C++ 0x, sử dụng thuộc tính, bạn có thể chỉ làm điều này:
char storage [[align(my_class)]] [sizeof(my_class)];
Đối với tôi, điều đó là tốt. –
Không, dấu ba chấm không hợp pháp trong ngữ cảnh đó ... (Gợi ý: nếu bạn muốn hỏi xem mã có được xác định rõ không, nó phải biên dịch trước.) – GManNickG
Bất kỳ ai hãy nói cho tôi biết cách sử dụng điều trên là gì trong thế giới pogramming thực sự. – vrbilgi