프로그래밍/MFC
new 형변환시 동작
에어버스
2019. 11. 30. 20:16
new 형변환시 동작
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 |
/*
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
*/
class A {
public: A() {}
};
void NewTest() {
BYTE temp[sizeof(A)];
A* pA = new (temp)A;
}
BOOL CMFCApplication1Dlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
NewTest(); |
cs |
new 연산자는 생성자를 실행하고,
A를 temp로 형변환이 되면 pA는 힙에 할당되지 않고 temp 주소값을 갖게된다.
12행에서 A* pA = (A*)temp; 로 하면 형변환만 될뿐 생성자 호출은 당연히 안된다.
이 처럼 생성자를 호출하면서 힙에 메모리 할딩하지 않을 경우 형변환을 해주면 된다.
MFC에서 위 코드 12행에서 컴파일 에러나므로 2~4행 전처리기를 주석처리해야 한다.
85행 처럼 형변환 없이 일반적인 new 연산자 동작은 힙에 메모리 할당하고 주소를 반환하여
pA 와 temp 주소가 다른걸 확인할 수 있다.