- 생성자
객체가 생성될 때 자동으로 호출되는 클래스 멤버 함수입니다. 이 함수는 객체의 초기화를 담당합니다.
초기화 방법 3가지
(1) 리터럴 초기화
class UMonster
{
// 맴버
private:
// 최신 C++의 방식인 리터럴 초기화
int32 iHp = 20;
};
(2) 리스트 이니셜라이즈 초기화 방식
-> 맴버 변수가 다 public 일 때만 가능
class UPlayer
{
public:
// public인 변수는 배열초기화를 하것처럼 초기화 할수 있는데.
// 이걸 이니셜라이즈 리스트 초기화 방식이라고 한다.
// 모든 변수가 public일때만 가능하다.
// UPlayer NewPlayer = { 10 };
int32 iHp = 30;
};
int main()
{
UPlayer NewPlayer = { 10 };
...
}
(3) 맴버이니셜 라이저 문법 생성자
class NPC
{
public:
// 생성자
// 맴버함수의 규칙에서 예외
// 1. 리턴값이 없다. => 자기 자신을 포함하고 있는 객체를 만들어서 리턴
// 2. 생성자는 애는 객체 없이도 호출 가능 -> 무순을 해결해야하는데 그방법으로 생성자는 객체 없이도 호출하게 만든 것뿐
// 3. 무조건 클래스의 이름과 동일해야 한다. -> 사용편의성을 위한 규칙
// 4. 초기화를 위한 맴버이니셜라이저 문법이라는 것을 유일하게 사용할 수 있다.
// -> 아래 내용확인
// 5. 디폴트 생성자를 만들지 않았다면,
// 아래와 같은 기본 생성자를 만들어 버린다
// 대입과 초기화의 차이를 이해
// int value=0; -> 메모리가 만들어짐과 동시에 값을 넣어준느 초기화
// value=0 -> 메모리가 만들어진 이후에 값을 넣어주는 대입
// 맴버이니셜 라이저 문법 생성자() : 맴버이름()
NPC() : iHp(100), iAtt(10) // int32()
{
// 사용할수 있다. -> 이미 만들어져 있다.
// 대입
iHp=20;
}
private:
int32 iHp;
int32 iAtt;
};
- 소멸자
소멸자는 객체가 소멸될 때 자동으로 실행되는 클래스의 멤버 함수
- vitual 소멸자 이유?
부모
class A
{
public:
// 부모 클래스 소멸자에서 virtual 해두면 자식도 실행
virtual ~A()
{
int32 ia = 0;
};
virtual void test()
{
std::cout << "부모" << "\n";
int32 ia = 0;
}
private:
};
자식
class B :public A
{
public:
~B()
{
int32 ia = 0;
}
void test()
{
std::cout << "자식"<<"\n";
int32 ia = 30;
}
private:
std::vector<int32> i_List = { 10,10 };
};
A* test = new B();
생성자 인 경우
부모(A) -> 자식 (B) 순으로 실행 virtual 유무 노상관
소멸자인 경우
부모 소멸자에서 virtual을 안하면 부모 소멸자만 호출되고 자식 소멸자는 호출이 안돼 릭이 남는다.
virtual을 함으로써 자식 소멸자도 실행한다.
자식 실행 후 -> 부모 실행 생성자와 반대
예시) begine, tick 부모 함수 호출 먼저 실행
참고
- 클래스에 virtual 함수가 여러 개면 생성될 때 생성자에서 자동으로 함수 포인터의 배열로 만들고, 그 배열의 포인터를 들고 있기 때문이다. void(**vfptr)()가 된다. 그래서 virtual 함수가 여러 개여도 클래스의 크기는 8바이트가 된다. 그리고 그 함수 포인터의 배열이 가상함수 테이블
- 가상함수 테이블이란 함수 포인터의 배열의 첫번째 주소이다.
- 함수 2중 포인터라고 할 수 있다.
- 생성자에서 가상함수 테이블의 값들을 채워준다.



'C++ 개념 정리' 카테고리의 다른 글
| 8. Enum Vs Enum Class (0) | 2026.01.04 |
|---|---|
| 7. C++ 형변환 (1) | 2026.01.03 |
| 5. 연산자 (0) | 2026.01.03 |
| 4. 메모리 (0) | 2026.01.01 |
| 3. C++ template (0) | 2025.12.30 |