Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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
- 언리얼
- permutation
- dfs
- 백준
- UE5
- 내가해냄
- 언리얼로그
- 개발
- c++자료구조
- 자료구조
- 재귀함수
- 코딩테스트
- fstring
- 오늘의에러
- 게임개발
- 코딩
- 프로그래밍
- 개발자
- 탐색기법
- 링크드리스트
- 미라클모닝
- 커스텀로그
- unreal
- 연산자오버로딩
- 구조체
- TPS
- 얌얌코딩
- 게임프로그래밍
- 구조체포인터
- C++
Archives
- Today
- Total
All is well
[YYBASIC0103/얌얌코딩] 생성자, 소멸자 본문
생성자 : 객체 생성 시 (= 객체가 메모리에 할당될 때) 호출되는 함수
- 생성자는 클래스와 이름이 같고 반환형이 없는 함수로, 직접 만들지 않아도 암시적으로 자동 생성되는 함수입니다.
- 생성자는 객체 생성 후 해당 객체의 멤버 변수 초기화 용도로 사용이 가능한데 이 경우, 명시적으로 class 안에 생성자를 만들고 작업할 내용을 작성해야 합니다.
- 일반적으로 생성자를 이용한 멤버 변수 초기화는
- class 객체를 생성한 후
- 생성자에서 멤버 변수 초기화가 진행됩니다.
- `int a; a = 10; `와 같다고 이해하면 됩니다.
- member initialize(멤버 이니셜라이즈) `: `를 사용하면 클래스 객체의 생성과 동시에 초기화가 가능합니다.
- `int a = 10; `와 같다고 이해하면 됩니다.
- cf) member initialize(멤버 이니셜라이즈) : 생성자에서 멤버 변수를 초기화할 때 사용하는 `: `구문
- 생성자는 함수이므로 overloading이 가능합니다. 즉, 매개변수를 이용하여 객체 생성 시에 원하는 값으로 초기화가 가능합니다.
소멸자 : 객체 소멸 시 (= 객체가 메모리에서 해제될 때) 호출되는 함수
- 소멸자는 클래스명 앞에 `~` 기호가 붙고 반환형이 없는 함수로, 생성자와 마찬가지로 암시적으로 자동 생성되는 함수입니다.
- 메모리 해제 시 특정 작업을 해야 하면 명시적으로 class 안에 소멸자를 만들고 작업할 내용을 작성해야 합니다.
- 소멸자는 가장 최신/마지막에 생성된 객체부터 호출하는데 그 이유는 다음과 같습니다.
- 지역 변수는 Stack에 할당되어 **LIFO( Last In First Out )**방식으로 메모리에서 해제됩니다.
- LIFO ( Last In First Out ) : 마지막에 들어온 객체가 먼저 나간다 - 프링글스
- 객체는 지역 변수로 생성이 되므로 가장 최신/마지막에 생성된 객체부터 호출하게 됩니다.
- ex) main()에서 People class 객체가 p1→p2→p3 순서대로 생성되었으면 p3→p2→p1 순서로 메모리에서 해제가 됨. 즉, p3→p2→p1 순서로 소멸자가 호출됨
- 지역 변수는 Stack에 할당되어 **LIFO( Last In First Out )**방식으로 메모리에서 해제됩니다.
- 소멸자도 생성자와 마찬가지로 overloading이 가능합니다.
#include <iostream>
using namespace std;
class Test1
{
private:
// 멤버 변수 생성
int a, b;
public:
// 일반적인 생성자 : 이미 생성된 객체의 멤버 변수 초기화
// 변수의 선언과 정의가 분리되어 있는 경우라고 생각하면 됨
// int a;
// a = 10;
Test1()
{
a = 0;
b = 0;
}
// 함수 오버로딩
Test1(int nA, int nB)
{
a = nA;
b = nB;
}
// 소멸자
~Test1()
{
a = 0;
b = 0;
}
};
class Test2
{
private:
int a, b;
public:
// 멤버 이니셜라이즈(:)를 이용한 생성자 : 객체 생성과 동시에 멤버 변수 초기화
// 변수의 선언과 정의가 한 번에 일어나는 경우라고 생각하면 됨
// int a = 10;
Test2() : a(0), b(0)
{
}
// 함수 오버로딩
Test2(int nA, int nB) : a(nA), b(nB)
{
}
// 소멸자
~Test2()
{
a = 0;
b = 0;
}
};
int main()
{
Test1 t1;
Test2 t2;
}
'C++ > YYBASIC' 카테고리의 다른 글
| [YYBASIC0201/얌얌코딩] 기본기 복습 (0) | 2025.02.04 |
|---|---|
| [YYBASIC0105/얌얌코딩] 간단한 버전의 std::string 클래스 만들어보기 (0) | 2025.02.03 |
| [YYBASIC0104/얌얌코딩] 연산자 오버로딩 기본 (0) | 2025.02.03 |
| [YYBASIC0102/얌얌코딩] 멀티패러다임 언어 (2) | 2025.02.02 |
| [YYBASIC0101/얌얌코딩] 클래스와 구조체, 멤버함수의 동작원리 (0) | 2025.01.31 |