취미로 음악을 하는 개발자

[C++] 객체 생성과 소멸 본문

공대인/C[++]

[C++] 객체 생성과 소멸

영월특별시 2019. 5. 5. 18:07
728x90


C++에서는 객체를 생성할 때 자동으로 호출되는 생성자와 객체가 소멸될 때 자동으로 호출되는 소멸자라는 것이 있다.

생성자는 멤버 변수 초기화할 때, 소멸자는 메모리에서 해제될 때(?) 사용하는 용도로 보인다.


#include <iostream>

using namespace std;

class MyClass {
public:
MyClass() { // 생성자
cout << "생성자 호출" << endl;
}

~MyClass() { // 소멸자
cout << "소멸자 호출" << endl;
}
};

MyClass ex;
int main() {
cout << "main 시작" << endl;
cout << "main 끝" << endl;
}


실행하면 아래와 같이 출력된다.


생성자 호출

main 시작

main 끝

소멸자 호출


위에서는 직접 선언했지만 클래스에서 생성자와 소멸자를 굳이 선언 안해도 자동으로 아무런 값이 없는 생성자와 소멸자가 선언된다.

또 ex라는 변수가 전역변수로 선언되었기 때문에 생성자가 만들어지고 main 문이 실행되므로 출력이 위와 같이 나오게 된다.


/*
1. 함수 시작 때 첫 줄에 있는 문장 출력 : testLocal 함수 시작
2. MyClass 생성 : 생성자 호출
3. 마지막 문장 출력 : testLocal 함수 끝
4. 함수 종료 : 소멸자 호출
*/
void testLocal() { // 지역변수로서 테스트
cout << "testLocal 함수 시작" << endl;
MyClass ex2;
cout << "testLocal 함수 끝" << endl;
}
int main() {
cout << "main 시작" << endl;
testLocal();
cout << "main 끝" << endl;
}


출력 :

main 시작

testLocal 함수 시작

생성자 호출

testLocal 함수 끝

소멸자 호출

main 끝


클래스 안의 코드는 바꾸지 않고 지역변수로 쓰기 위한 함수와 main 문을 생성하고 변경했다.

이번에는 전역변수에서 지역변수로 바꿔보고 main이 먼저 실행하게 된다.

그 후에 함수가 실행되고 함수 안의 문장이 출력된 후에 클래스 변수가 선언되었으므로 위와 같이 출력이 나오게 된다.


클래스 변수를 선언하는 데에는 여러 가지 표현으로 나타낼 수 있는데

public:
Complex() {
real = 0;
imag = 0;
}
Complex(double real_, double imag_) {
real = real_;
imag = imag_;
}


Complex라는 클래스를 만들고 이 클래스에 대한 여러 표현을 나타냈다.

Complex c1;
Complex c2 = Complex(2, 3);
Complex c3(2,3);
Complex c4 = {2, 3};
Complex c5 = Complex{ 2, 3};
Complex c6{2, 3};


c1을 제외하고는 매개변수를 이용한 생성자를 선언해주는 표현들이다. 구조체와 비슷하기도 하다.



'공대인 > C[++]' 카테고리의 다른 글

[C++] Static 멤버  (0) 2019.05.12
[C++] 초기화 목록, 생성자 위임  (0) 2019.05.05
[C++] 클래스  (0) 2019.04.23
[C++] Namespace  (0) 2019.04.12
[C++] 스타일 함수 심화  (0) 2019.04.11
Comments