C++에서 배치 new
구문에 관한 질문이 있습니다. 다음 두 코드 조각은 기능상으로 동일하며 서로 교환하여 사용할 수 있습니다 (첫 번째 코드가 적합 할 때 두 번째 코드를 사용해야 함을 의미하지는 않습니다).게재 위치 새 동작 해당 사항
# 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;
뭔가 내가이 같은 배치 새 구문을 사용하고 때 나는 특히주의해야 있습니까? 당신은 원시 메모리를 할당하고 있기 때문에
이 메모리는'새로운 문자가 할당 한 것 [는 sizeof (T)]'제대로 정렬 : 하나 common approach는 다음과? –
@TadeuszKopec : 표준은 메모리가 가능한 최대 정렬을 보장합니다. 이것은 자연 정렬 (즉, 기본 제공 유형과 함께 표시)을 사용하는 경우에만 유지됩니다. 예를 들어, pragma를 사용하여 유형의 정렬을 최대, 즉 최대 두 배로 늘린 다음 모든 베팅을 해제하면됩니다. –