6주차-객체 배열, 동적 메모리 할당, 객체 배열 동적 생성, this 포인터
객체 배열, 생성 및 소멸
<객체 배열 선언>
(1) 기본 타입 배열 선언과 형식 동일
(2). 객체 배열을 위한 공간 할당
(3). 배열의 각 원소 객체마다 생성자 실행
- c[0]의 생성자, c[1]의 생성자, c[2]의 생성자 실행
- 매개 변수 없는 생성자 호출
(**매개 변수 있는 생성자를 호출할 수 없음)
<객체 배열 소멸>
배열의 각 객체마다 소멸자 호출. 생성의 반대순으로 소멸
ex) c[2]의 소멸자, c[1]의 소멸자, c[0]의 소멸자 순서로 실행
객체 배열 생성과 활용
객체 배열 생성시엔 기본 생성자 호출
<객체 배열 초기화>
객체 배열 초기화 방법
ex1) 배열의 각 원소 객체당 생성자 지정하는 방법
circleArray[0] 객체가 생성될 때, 생성자 Circle(10) 호출
circleArray[1] 객체가 생성될 때, 생성자 Circle(20) 호출
circleArray[2] 객체가 생성될 때, 생성자 Circle() 호출
<2차원 객체 배열>
<동적 메모리 할당 및 반환>
정적 할당
변수 선언을 통해 필요한 메모리 할당 (많은 양의 메모리는 배열 선언을 통해 할당)
동적 할당
필요한 양이 예측되지 않는 경우, 프로그램 작성 시 할당받을 수 없음
실행 중에 운영체제로부터 할당 받음 (힙으로부터 할당)
(**힙: 운영체제가 소유하고 관리하는 메모리. 모든 프로세스가 공유할 수 있는 메모리)
C언어의 동적 메모리 할당/반환: malloc()/free() 라이브러리 함수 사용
C++의 동적 메모리 할당/반환
new 연산자
- 기본 타입 메모리 할당, 배열 할당, 객체 할당, 객체 배열 할당
- 객체의 동적 생성 - 힙 메모리로부터 객체를 위한 메모리 할당 요청
- 객체 할당 시 생성자 호출
delete 연산자
- new로 할당받은 메모리 반환
- 객체의 동적 소멸 - 소멸자 호출 뒤 객체를 힙에 반환
new/delete 연산자의 사용 형식
new/delete의 사용
1. 기본 타입의 메모리 동적 할당 및 반환
delete 사용 시 주의 사항
- 적절하지 못한 포인터로 delete 하면 실행 시간 오류 발생
ex1) 동적으로 할당받지 않는 메모리 반환
ex2) 동적으로 할당받지 않는 메모리 반환
2. 배열의 동적 할당 및 반환
동적 할당 메모리 초기화 및 delete 시 유의 사항
(1) 동적 할당 메모리 초기화
- 동적 할당 시 초기화
(**배열은 동적 할당 시 초기화 불가능)
(2) delete시 [] 생략
컴파일 오류는 아니지만 비정상적인 반환
3. 객체의 동적 생성 및 반환
객체 배열의 동적 생성 및 반환
this 포인터
- 포인터, 객체 자신 포인터
- 클래스의 멤버 함수 내에서만 사용
- 개발자가 선언하는 변수가 아니고 컴파일러가 선언한 변수
this 포인터가 필요한 경우
(1) 매개변수의 이름과 멤버 변수의 이름이 같은 경우
(2) 멤버 함수가 객체 자신의 주소를 리턴할 때 (연산자 중복 시에 매우 필요)
this의 제약 사항
- 멤버 함수가 아닌 함수에서 this 사용 불가
- static 멤버 함수에서 this 사용 불가 (객체가 생기기 전에 static 함수 호출이 있을 수 있음)
참고 명품 C++ 프로그래밍