나는 배치 새을 사용할 때 소멸자를 수동으로 호출해야한다는 것을 다소간 읽었습니다. 내가 운영자 delete
일반적으로 소멸자를 호출하고 메모리 할당을 취소 알고있는 바로, 지금까지배치에 의해 할당 된 메모리를 올바르게 해제하는 방법은 무엇입니까?
// Allocate memory ourself
char* pMemory = new char[ sizeof(MyClass)];
// Construct the object ourself
MyClass* pMyClass = new(pMemory) MyClass();
// The destruction of object is our duty.
pMyClass->~MyClass();
:
는 folowing 코드를 고려? 그러면 대신delete
을 사용하지 않으시겠습니까? 첫 번째 경우에
delete pMyClass; //what's wrong with that?
우리는 우리가 이런 소멸자 호출 한 후
nullptr
에 pMyClass을 설정하는 강제 :
pMyClass->~MyClass();
pMyClass = nullptr; // is that correct?
을하지만 소멸자, 바로 메모리 할당을 해제하지 않았다? 그래서 메모리 누수가 될까요?
저는 혼란 스럽습니다. 설명 할 수 있습니까? 이 잘못
+1 좋은 질문, 나는 또한 그것을 이해하고 싶습니다. – AraK
기술적으로, 배치 new는 메모리를 할당하지 않습니다. 그러나이 컨텍스트의 세부 사항입니다. – Griwes
@Griwes : +1 아마 근본적인 지점입니다. –