c++

6주차-객체 배열, 동적 메모리 할당, 객체 배열 동적 생성, this 포인터

몰라몰라개복치 2020. 6. 8. 01:03

객체 배열, 생성 및 소멸

 

<객체 배열 선언> 

(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) 매개변수의 이름과 멤버 변수의 이름이 같은 경우

radius=radius(X)

(2) 멤버 함수가 객체 자신의 주소를 리턴할 때 (연산자 중복 시에 매우 필요)

 

this의 제약 사항

- 멤버 함수가 아닌 함수에서 this 사용 불가 

- static 멤버 함수에서 this 사용 불가 (객체가 생기기 전에 static 함수 호출이 있을 수 있음)

 

 

 

 

 

 

참고 명품 C++ 프로그래밍