C++ / constructor destructor

jaeha_lee·2022년 5월 9일
0
  • 모든 멤버 데이터가 public 영역에 있다면, 객체 생성시 { } 로 초기화 가능
  • 멤버 데이터가 하나라도 private에 있다면, 구조체 초기화 문법 사용할 수 없음 → 초기화 멤버 함수를 제공해야 함. 하지만, 초기화 할때마다 초기화 함수를 호출하는 것은 매우 번거로운 일. 그래서 등장한 것이 생성자
	class Person{ // 이렇게 선언되어 있으면 Person p = {"Lee",29} // 불가
    private : 
    	std::string name;
        int 	age;
    public:
    	void init(){
        	name = "Lee";
            age = 29;
        }
        Person(){ // 이것이 생성자. 그냥 객체를 생성하면 자동으로 호출됨
        	name = "Lee";
            age = 29;
        }
        
    }
  • 생성자 : 클래스이름(). 객체를 생성할 때 자동으로 호출
  • 소멸자 : ~클래스이름(). 객체가 파괴될 때 자동으로 호출
  • 생성자 특징
    • 반환 값을 표기하지 않고 값을 반환할 수 없음. 인자가 없어도 되고 있어도 됨.
    • 생성자가 있어야 객체를 생성할 수 있다.
    • 사용자가 생성자를 한 개도 만들지 않으면 컴파일러가 디폴트 생성자 제공
  • 생성자 호출 여러가지 방법
	Class Point{
    	int x,y;
        Point(){x=0;y=0;}				// 생성자 #1
        Point(int a, int b){x=a;y=b;}	//생성자 #2
    }
    
    int main(){
    	Point p;		// 1번 호출
        Point p2(1,2)	// 2번
        Point p3{1,2}	// 2번 , C++11부터
        Point p4 ={1,2} // 2번, C++11부터
        
        Point arr1[3]; // 생성자 #1 5번
        Point arr2[6] ={{1,2},{3,4}}; // #1=2번 / #2=4번 호출
        
        Point *p; // 객체 생성 되지 않음. 
        p = static_cast<Point*>(malloc(sizeof(Point)));
        free(p); //생성자 호출되지 않음;
        
        p_new1 = new Point; // #1 호출
        delete p_new1;
        
        p_new2 = new Point(1,2); // #2 호출
        delete p;
        
    }
  • 객체 생성시 멤버 데이터가 class로 생성자가 있다면,
    → 멤버의 생성자가 먼저 실행되고,
    → 객체 자신의 생성자가 호출된다.

0개의 댓글