📚책읽기

[C++] static 멤버, 생성자/파괴자

공대 컴린이 2023. 2. 3. 11:01
728x90

동적 메모리와 클래스

메모리를 동적으로 제어하기위해 C++는 new와 delete 연산자를 사용한다.

static 멤버

static 멤버 변수는 클래스 선언 안에서 초기화할 수 없다. 선언은 단지 메모리를 어떻게 대입할지에 대한 서술일 뿐, 실제로 메모리를 대입하지 않기 때문이다. 그 서술을 사용하여 실제로 객체를 생성해야만 메모리를 대입하고 초기화한다고 볼 수 있다.

static 클래스 멤버의 경우에는, 클래스 선언 바깥에서 별개의 구문을 사용하여 static 멤버를 독립적으로 초기화 해야한다. 이는 static 클래스 멤버가 객체의 일부분으로 저장되는 것이 아니라 별도로 저장되기 때문이다.

즉, static 데이터 멤버는 클래스 선언 안에서 선언되지만, 클래스 메서드 파일에서 초기화된다.

생성자/파괴자

문자열을 선언하고 사용할 때 문자열이 객체 안에 저장되지 않고 힙(heap) 메모리에 별도로 저장된다는 것을 알아야한다. 문자열이 힙 메모리에 생성되고 프로그램이 끝날 때 객체와 달리 자동으로 파괴되지 않기 때문에 delete를 사용하여 문자열 포인터가 지시하는 메모리를 해제해 주어야 한다.

즉, 생성자에서 new를 사용하여 메모리를 대입했을 때에는 대응하는 파괴자에서 delete를 사용하여 그 메모리를 해제해야 한다. 생성자에서 new [] 형식을 사용했다면, 파괴자에서도 delete[] 형식을 사용해야 한다.

 

728x90