생성자란 클래스를 생성(인스턴스화)할 때 자동으로 호출하는 함수를 말한다.
생성자는 오버로딩이 가능하고, 내가 생성자를 생략해도 컴파일러가 자동으로 만들어서 실행한다.
생성자는 클래스의 맴버변수를 초기화 해주는 역할을 한다.
초기화 해주는 방법은 생성자가 없어도 다양한 방법으로 할 수 있다.
그렇다면 왜 생성자가 필요한 것일까?
여기서 부터는 나의 추론이다.
일단 컴퓨터는 초기화를 굉장히 중요시 여긴다.
전역변수가 저장되는 공간인 데이터 영역도 초기화 되지 않은 공간인 bss영역을 따로 잡는다.
굳이 bss를 따로 잡는 이유는 초기화 되지 않은 변수는 공간을 할당하지 않게 되고 결과적으로 메모리를 아낄 수 있기 때문이다.
이는 하드웨어가 제한적인 프로그래밍(임베디드 같은)에서는 의미가 있지만, 우리가 하는 프로그래밍에서는 크게 의미가 없다.
초기화가 중요한 이유는 이와 같이 메모리적인 부분도 있지만, 실행의 시점도 있다.
// A.cpp
extern int g_B;
int InitializeA(){
return g_B + 1; // ②
}
int g_A = InitializeA(); // ①
// B.cpp
int InitializeB(){
return 1; // ④
}
int g_B = InitializeB(); // ③
// Main.cpp
extern int g_A;
void main(){
cout << g_A << endl; // ⓐ
}
3개의 cpp 파일이 있고 이와 같이 실행했을 때 g_A = 2 라는 기대값을 원하지만, 실제로는 1이 나올 수도 있다.
왜냐면 어느것이 먼저 초기화 될지는 알 수 없기 때문이다.
즉 실행하는 시점에 따라 초기값이 변동 될 수 있다는 것이다.
그래서 이러한 경우를 막고자 c++ 언어에서 따로 생성자란 것을 제공해주는 것이 아닐까 싶다.
소멸자
소멸자는 클래스가 소멸(인스턴스 해제)될때 자동으로 호출 되는 함수이다. 여기에 메모리 해제를 사용하면 편리하게 이용할 수 있다.
'게임개발 수업' 카테고리의 다른 글
객체 복사 (0) | 2022.11.29 |
---|---|
가상함수 (0) | 2022.11.25 |
static 키워드 (0) | 2022.11.23 |
OOP의 특징 (0) | 2022.11.16 |
STL vector (0) | 2022.11.08 |