본문 바로가기

C++

Placement new

[1. 개요]

placement new 라는 문법(혹은 기능) 은 일반적인 동적 할당 보다 조금 더 세밀하게 메모리의 수명을 관리할 수 있게 해준다.

 

일반적으로 객체를 대상으로 하는 new 는 메모리 할당 및 생성자 호출을

delete 는 소멸자 호출 및 메모리 해제를 같이 진행 하게 해준다.

 

그러나, 아래와 같은 요구사항이 있을 수 있다.

  • 메모리를 할당만 하고, 생성자 호출은 뒤로 미루고 싶다.
  • 소멸자를 호출하여, 객체 내부의 메모리를 정리하지만, 객체 자체의 메모리는 당장 해제하지 않고 싶다.

특히, 아래와 같은 상황도 있을 수 있다.

  • 공유 메모리를 대상으로 특정 객체를 공유하고 싶다.
  • 즉, 메모리는 이미 할당이 되어있지만, 객체의 생성자를 호출하고 싶다.

 

주의할 점은 

  • 소멸자가 자동으로 호출되지 않는다. (소멸자 호출을 반드시 명시해야 한다.)
  •  

[2. 예제]

실행 결과

buf address 0xf261fff770
ptr2 address 0xf261fff770
1 2 3 4 5 6 7 8 9 10

data0 address 0xf261fff770
9
2500
ABCD

data1 address 0x24f0fa55fa0
QWER
Call destructor

 

buf, ptr2, data0 의 시작 주소가 모두 같다.

'C++' 카테고리의 다른 글

buffer overflow 사례1  (0) 2025.06.26
Segmentation fault 사례5  (0) 2025.06.24
wchar_t 사용에 관하여 [2]  (0) 2025.05.13
wchar_t 사용과 관련하여.  (0) 2025.05.12
std::bind  (0) 2025.04.28