기본 패턴
cpp
class User {
public:
User(std::string name, int level)
: name(std::move(name)), level(level) {}
private:
std::string name;
int level;
};설명
- 생성자는 객체가 만들어질 때 필요한 초기 상태를 설정하는 특별한 함수입니다.
- 멤버 초기화 리스트는 본문보다 먼저 멤버를 초기화하므로 기본적인 권장 패턴입니다.
const멤버나 참조 멤버는 초기화 리스트에서만 제대로 초기화할 수 있습니다.- 초기화와 대입은 비슷해 보여도 객체 수명 관점에서는 다른 단계입니다.
짧은 예제
cpp
#include <iostream>
#include <string>
class Course {
public:
Course(std::string title, int credit)
: title(std::move(title)), credit(credit) {}
void print() const {
std::cout << title << " / " << credit << "\n";
}
private:
std::string title;
int credit;
};
int main() {
Course course("Data Structures", 3);
course.print();
}빠른 정리
| 항목 | 설명 |
|---|---|
| 생성자 | 객체 생성 시 호출되는 특별한 함수 |
| 초기화 리스트 | 멤버를 생성과 동시에 초기화 |
const 멤버 | 초기화 리스트가 사실상 필수 |
| 참조 멤버 | 생성 후 다른 대상을 가리키게 바꿀 수 없음 |
| 초기화 우선 | 대입보다 더 직접적인 생성 단계 |
주의할 점
초기화 리스트의 실제 실행 순서는 코드에 적은 순서가 아니라 멤버 선언 순서입니다. 선언 순서와 초기화 순서를 일부러 다르게 적으면 혼란이 커집니다.