Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 데이터베이스
- 오라클 아키텍처
- 인덱스
- 개발자
- DBMS
- 스위트라떼
- 니가 참 좋아
- IT
- index
- 기타
- 장범준
- 러블리즈
- 봄 사랑 벚꽃 말고
- 슬픔의 후에
- db
- 천공의 시간
- Inside Of Me
- 아이유
- 신입
- 6학년 8반 1분단
- nginx
- I'm fine thank you
- 오라클
- oracle
- 핑거스타일
- 말 더듬
- SQL 처리
- DBMS 구성요소
- 악보
- 레이디스코드
Archives
취미로 음악을 하는 개발자
[C++] 객체 생성과 소멸 본문
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