new
C++에서는 malloc()과 같은 함수를 통해 동적 바인딩을 했을것이다. 그러나 이 방법은 클래스를 사용할때 단점이 발생한다.
클래스의 생성자를 파괴자를 new와 delete를 통해 자동적으로 호출된다. 물론 malloc()으로 사용하면 사용을 못하는 것은 아니다 다만 자동적으로 실행되지 않는다.
new는 어떤 데이터형의 메모리를 원하는지 new 연산자에게 알려 주면, new 연산자는 그에 알맞는 크기의 메모리 블록을 찾아내고, 그 블록의 주소를 리턴한다.[1]
delete
int* ps = new int;
...
delete ps;
delete는 위와 같이 사용하면 메모리가 해제된다. 그러나 ps 자체가 없어지는 것은 아니다. 예를 들어, Ps는 새로 대입한 메모리를 지시하는 데 다시 사용할 수 있다.[2]
delete를 사용할 때 가장 중요한 요구 사항은, new로 대입한 메모리에만 그것을 사용하라는 것이다. 이것은 new가 사용한 것과 동일한 포인터 변수에 사용해야 한다는 뜻이 아니라, 동일한 주소에 사용해야 한다는 뜻이다.[3]
[1]p.188
[2]p.191
[3]p.192
'C++ > C++ 기초 플러스 6판(Book)' 카테고리의 다른 글
[C++] 자동 공간, 정적 공간, 동적 공간 (0) | 2025.03.24 |
---|---|
[C++] 동적 배열과 배열 표기 (0) | 2025.03.24 |
[C++] 포인터 선언과 초기화 (0) | 2025.03.22 |
[C++] C++ 프로그래밍 철학: 포인터와 템플릿이 존재하는 이유(객체 지향과 포인터의 관계) (0) | 2025.03.21 |
[C++] 프렌드, 예외, 기타 사항 (0) | 2025.03.14 |