본문 바로가기
프로그래밍/C++

생성자와 소멸자

by Nessie! 2022. 8. 18.
본 글은 공부용으로 작성된 글로 틀린 내용이 있을 수 있습니다.

 

 

오늘은 생성자와 소멸자에 대해 알아보려고한다.

 

생성자

간단히 알아보자면 우선 생성자는 객체를 만들때 동시에 초기화까지 같이 해주는 역할을 한다고 생각하면 된다.

 

생성자를 사용할때에는 아래와 같은 특징을 가진다.

 

1. public에서 작성해야한다.

2. 생성자의 이름은 클래스의 이름과 같아야 한다.

3. 반환( return)형이 선언되어 있지 않고 실제로도 반환하지 않는다.

4. 객체 생성시에 딱 한번 호출된다.

5. 생성자도 일종의 함수이므로 오버로딩이 가능하다. (즉, 객체 생성을 다양하게 할 수 있다.)

6. 생성자도 디폴트값을 설정할 수 있다.

 

아래와 같이 사용할 수 있다.

class aaa
{
private:
	int a;
	int b;

public:
	aaa()		//이게 생성자다!
	{
		a = 0;
		b = 0;
	}

	int getA()
	{
		return a;
	}
};
int main()
{
	aaa A;
	cout << A.getA() << endl;
}

귀찮아서 b는 출력을 안했다;

 

위 구문의 출력된 값을 보면 아래의 프로그램이 실행된다. 

즉, 초기화된 값이 잘 출력된 것을 볼 수 있다.

 

근데, 생성자에도 종류가 있다!

위에 사용한 생성자는 기본 생성자다.

C++에서 별도로 구현하지 않는다면 자동으로 해당 생성자가 사용된다고 한다.

또한, 기본 생성자는 매개 변수를 가지지 않으며 멤버 변수는 0, NULL 등으로 초기화 된다.

 

다른 생성자는 복사생성자가 있는데, 복사 생성자의 특징은 아래와 같다. 

C++에서 복사 생성자란 자신과 같은 클래스 타입의 다른 객체에 대한 참조(reference)를 인수로 전달받아, 그 참조를 가지고 자신을 초기화하는 방법이다.

복사 생성자는 새롭게 생성되는 객체가 원본 객체와 같으면서도, 완전한 독립성을 가지게 해준다.

왜냐하면, 복사 생성자를 이용한 대입은 깊은 복사(deep copy)를 통한 값의 복사이기 때문이다.

더보기

https://velog.io/@underlier12/C-03-%EC%83%9D%EC%84%B1%EC%9E%90%EC%99%80-%EC%86%8C%EB%A9%B8%EC%9E%90

기본생성자의 특징은 상기 블로그를 참조하여 그대로 가져왔다.
http://www.tcpschool.com/cpp/cpp_conDestructor_copyConstructor

복사생성자의 특징은 위 글을 참조했다.

 

소멸자

생성자가 있다면 소멸자 또한 있다!

그 특징은 아래와 같다

소멸자(Destructor)는 객체의 수명이 끝났을 때 객체를 제거하기 위한 목적으로 사용된다. 객체의 수명이 끝났을 때 자동으로 컴파일러가 소멸자 함수를 호출한다. 클래스명과 동일하며 '~'기호를 사용한다.

 

class aaa
{
private:
	int a;
	int b;

public:
	aaa()
	{
		a = 0;
		b = 0;
	}
	~aaa() {
		cout << "[객체가 소멸됩니다.]\n";
	}

	int getA()
	{
		return a;
	}
};

위에 작성한 생성자 그대로 소멸자를 적용시키면 이렇게된다.

 

출력결과는 당연히도 소멸된다는 내용까지 프린트된다.

 

 

근데 객체 생성 시 초기화가 필요한거면 a = 0 으로 쓰면되는거 아닌가.. 왜 쓰는건지 아직은 잘 모르겠다....

'프로그래밍 > C++' 카테고리의 다른 글

가상함수테이블  (0) 2022.08.22
가상함수 및 재정의  (0) 2022.08.19
정적변수(static variable)  (0) 2022.08.17
OOP 알아보기  (0) 2022.08.08
C++ vector  (0) 2022.07.27

댓글