Computer Science/C,C++
C++ - new, delete 연산자
flow-vector
2023. 3. 11. 18:20
new, delete 연산자
c의 malloc, free 시스템 콜 함수에 대응되는 c++에서 생긴 메모리 할당/해제 연산자이다.
사용법 및 특징
// 변수 동적할당
int* a;
a = new int(123); // int 크기만큼 메모리를 할당하고 123이라는 값으로 초기화
delete a; // a 메모리 할당 해제
// 배열 동적할당
int* b;
b = new int[5]; // 길이 5인 int형 배열 동적 할당
delete[] b; // 배열 b 메로리 할당 해제
// 객체의 동적할당
class A
{
public:
A(std::string name);
};
A *a = new A("hello"); // A 클래스가 사용하는 생성자를 사용하여 동적할당
delete a;
- new 연산자로 객체를 할당 할때 , 객체의 생성자가 자동으로 호출되어 객체 초기화가 일어난다.
- delete 연산자로 객체를 해제 할때, 객체의 소멸자가 자동으로 호출된다.
- 상기 이유로 인해 특히 객체의 동적할당을 할때는 반드시 new, delete 연산자를 활용하는 것이 좋다.
- malloc을 사용할 겨우 힙 영역에 객체가 사용할 메모리만 할당될 뿐 객체의 멤버에는 쓰레기 값이 들어간다. (초기화 되지 않기 때문)
- 배열을 delete 할 때는 반드시 delete[] 를 사용해야한다.
- delete만 사용하면 배열의 첫번째 주소만 delete되어 메모리 누수가 난다.