승쨩개발공부

[C++] 생성자와 소멸자 본문

C++

[C++] 생성자와 소멸자

SeungHyune 2021. 12. 2. 23:05

생성자

객체 생성 시 자동으로 호출 되는 것.

사용자가 호출하지 않는다.

함수의 일종으로 인자 타입, 인자 개수에 따른 오버로딩이 가능하다.

클래스의 이름으로 정의된다.

반환 타입이 없다.

객체 생성은 외부에서 진행하기 댸문에 생성자의 멤버 접근 지정자는 public으로 설정한다.

객체는 생성자에 의해 완성된다.

 

 

 

생성자의 주 사용 목적

객체 멤버로 초기화할 값이 있을 경우 사용한다.

 

 

 

생성자로 데이터를 전달하는 방법

C++ 초기화 형식과 동일하다.

CObj obj(10, 3.14);

 

생성자 사용 시 주의사항

 

1. 객체 생성은 생성자 호출에 의해 완성된다.

-> 호출할 생성자가 없을 경우 객체를 만들 수 없다.

-> 오버로딩을 이용하여 생성자를 여러개 정의해주어야 한다.

 

2. 디폴트 생성자

-> 사용자가 생성자를 정의하지 않을 경우 컴파일러는 디폴트 생성자를 자동으로 생성해서 호출한다.

-> 단, 사용자가 한개 이상의 생성자를 정의할 경우 디폴트 생성자는 생성하지 않는다.

 

 

 

 

explicit 키워드

-> 생성자 앞에 explicit 키워드를 명시하면 C기반의 초기화(형 변환) 을 막는다.

-> 초기화는 무조건 C++기반의 초기화만 허용한다.

 

예를 들어 다음과 같이 대입을 하게 되면

CObj	obj3 = 20;

대입 연산자 기준 좌측은 사용자 정의 자료형, 우측은 int형이다.

즉, 타입이 다른 자료형끼리 대입이 진행되고 있다.(초기화가 가능)

 

대입 연산자 기준 좌측 자료형으로 형 변환이 발생했다.

20이라는 int형 데이터가 CObj Temp(20) 이라는 형태로 형 변환이 발생하고,

CObj obj3 = Temp 형식으로 값을 대입하고 있다.

 

형 변환이 발생한다 하여도 사용자가 보기에는 어색함이 있을 수도 있다.

이를 방지하기 위하여 explicit 키워드를 사용한다.

 

 

 

 

 

 

 

 

 

소멸자

객체 소멸시 자동으로 호출되는 것.

생성자와 비슷하지만 반대 개념이다.

이름은 클래스 이름으로 정의화되 ~을 앞에 붙여준다.

반환타입이 없으며 매개 변수의 정보를 사용자가 정의할 수 없다.

사용자가 소멸자를 정의하지 않으면 컴파일러가 디폴트 소멸자를 생성하여 호출한다.

 

소멸자의 사용 용도

동적할당한 멤버가 있을 경우 해제하는 용도로 사용한다.

소멸자에서 Release() 를 호출하면 사용자가 Release()를 호출할 필요가 없어진다.

 

 

생성자와 소멸자 정리

객체 생성과 소멸 순서

 

객체 생성 -> 메모리 할당 -> 생성자 호출

소멸자 호출 -> 메모리 반환 -> 객체 소멸

'C++' 카테고리의 다른 글

[C++] const와 클래스, 멤버함수, 이니셜라이져  (0) 2021.12.02
[C++] 전방 선언  (0) 2021.12.02
[C++] 클래스, 클래스의 4대 속성  (0) 2021.12.01
[C++] 디버깅  (0) 2021.12.01
[C++] String  (0) 2021.12.01