-
객체 생성 시 함수 호출 순서개발/C·C++ 2021. 12. 27. 19:02
메모리를 동적으로 할당할 때 C++가 C와 다른 점은 생성자의 함수의 호출입니다. new와 delete의 오버로딩을 통해 동적 할당의 순서를 확인해봅시다.
#include <iostream> #include <malloc.h> using namespace std; class A { public: A() { cout << "+A"; } void* operator new(size_t size) { cout << "N"; return ::malloc(size); } void operator delete(void* p) { cout << "D"; ::free(p); } ~A() { cout << "-A"; } }; class B : public A { public: B() { cout << "+B"; } ~B() { cout << "-B"; } }; int main() { B* b = new B(); delete b; }
결과는 N+A+B-B-AD입니다. delete 함수를 호출하면 소멸자가 먼저 호출되고 나서 메모리 해제가 진행됩니다.
'개발 > C·C++' 카테고리의 다른 글
알아두면 좋을 개념 (0) 2022.01.03 복사 생성자와 이동 생성자 (0) 2021.12.27 바이트 정렬 (0) 2021.09.24 union (0) 2021.09.24 스마트 포인터 (0) 2021.09.19