flow-vector

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되어 메모리 누수가 난다.

'Computer Science > C,C++' 카테고리의 다른 글

C++ - 참조자(reference)  (0) 2023.03.11
profile

flow-vector

@flow-vector

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!