Tôi có câu hỏi liên quan đến vị trí cú pháp new
trong C++. Hai đoạn mã sau đây có tương đương về mặt chức năng và có thể được sử dụng thay thế cho nhau không (tôi không ngụ ý rằng đoạn mã thứ hai nên được sử dụng, khi đoạn mã thứ nhất phù hợp)?Vị trí hành vi mới tương đương
# 1
T* myObj = new T();
// Do something with myObj
delete myObj;
# 2
char* mem = new char[sizeof(T)];
T* myObj = new (mem) T();
// Do something with myObj
myObj->~T();
delete[] mem;
Có cái gì tôi nên đặc biệt cẩn thận trong khi tôi đang sử dụng vị trí cú pháp mới như thế này?
Bộ nhớ được cấp phát bởi 'new char [sizeof (T)]' có được căn chỉnh đúng không? –
@TadeuszKopec: Tiêu chuẩn đảm bảo rằng bộ nhớ có liên kết tối đa có thể. Điều này chỉ giữ nếu bạn sử dụng các sắp xếp tự nhiên (tức là xuất hiện với các kiểu dựng sẵn), nếu bạn sử dụng các pragmas để làm tăng sự liên kết của một loại, cao hơn gấp hai lần, thì tất cả các phiên cược sẽ bị tắt. –