**객체의 생성 과정

  1. 메모리 할당
  2. 생성자 호출

**객체의 소멸 과정

  1. 소멸자 호출
  2. 메모리 반환

객체 생성 시, 컴파일러는 자동으로 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 복사 생성자

**default 소멸자