배치 New 및 삭제: 적절한 메모리 할당 해제
"placement new" 연산자(new(mem) 구문)를 모두 사용하여 메모리를 할당하는 경우 및 표준 new 연산자를 사용하는 경우 올바른 방법을 사용하여 메모리를 해제하는 것이 중요합니다.
다음 코드 조각을 고려하세요.
<code class="cpp">const char* charString = "Hello, World"; void *mem = ::operator new(sizeof(Buffer) + strlen(charString) + 1); Buffer* buf = new(mem) Buffer(strlen(charString));</code>
할당된 메모리를 올바르게 할당 해제하려면 다음을 호출해야 합니다. :
<code class="cpp">buf->~Buffer(); ::operator delete(mem);</code>
그 이유는 다음과 같습니다.
잘못된 접근 방식:
접근 방법 1:
<code class="cpp">delete (char*)buf;</code>
이 접근 방법은 버퍼가 char* 포인터인 것처럼 삭제하려고 시도하므로 올바르지 않습니다. 그러나 메모리는 new 배치로 할당되었으므로 대신 delete 연산자를 사용해야 합니다.
접근 방법 2:
<code class="cpp">delete buf;</code>
이 접근 방법도 실패하므로 올바르지 않습니다. Buffer 객체의 소멸자를 수동으로 호출합니다. 결과적으로 객체가 획득한 리소스가 해제되지 않아 잠재적으로 메모리 누수나 기타 문제가 발생할 수 있습니다.
위 내용은 다음은 질문 형식과 내용과의 관련성을 염두에 두고 몇 가지 제목 옵션입니다. 옵션 1(문제에 집중): * 새로운 배치를 사용할 때 'delete buf'가 잘못된 이유는 무엇입니까? 옵션 2(의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!