**객체의 생성 과정
- 메모리 할당
- 생성자 호출
**객체의 소멸 과정
- 소멸자 호출
- 메모리 반환
객체 생성 시, 컴파일러는 자동으로 4개의 함수를 만듬
사용자가 명시적으로 생성 시 컴파일러는 default 함수를 생성하지 않음
클래스의 이름과 멤벼 변수들의 이름은 데이터 영역에 저장되어 어디에서든 접근 가능
**default 생성자
- 생성자가 하나라도 존재 할 시에는 default 생성자가 호출 되지 않음
- 오버로딩이 가능함
- 클래스를 동적할당 시, new 연산자가 생성자를 호출한다(malloc은 메모리 할당은 하지만 생성자 호출x)
- 생성자의 내부에서 동적할당을 하는것은 지양 하는것이 좋다
class Obj {
int val;
public:
Obj(){} 생성자
Obj(int _x):val(_x){} 생성자를 통한 초기화
};
생성자는 객체를 생성, 초기화 하는 역할을 한다
Obj(int _x){
val = _x 멤버 변수 val를 생성하고 _x를 대입
}
Obj(int _x):val(_x){} 멤버 변수 val를 생성과 동시에 _x로 초기화
**default 대입 연산자
class Obj {
int val;
public:
Obj(int _x):val(_x){}
};
int main(){
Obj cObj = 500;
}
컴파일러가 자동으로 생성자를 선택하고 객체를 생성함 - 묵시적 형변환
의도한 동작이 아니라면 생성자 앞에 explicit 붙여 묵시적 형변환을 막을 수 있음
class Obj {
int val;
public:
explicit Obj(int _x):val(_x){}
};
int main(){
Obj cObj = 500; //컴파일 에러
}
**default 복사 생성자