생성자와 소멸자

생성자와 소멸자

  • 생성자와 소멸자는 객체 지향 프로그래밍에서 클래스의 특별한 종류의 함수다
  • 생성자는 객체가 생성될 때 호출되는 함수로, 객체의 초기화를 담당한다. 일반적으로 클래스와 동일한 이름을 가지고 있으며, 객체가 생성될 때 자동으로 호출되어 멤버 변수의 초기값을 설정하거나 다른 초기화 작업을 수행한다.
  • 소멸자는 객체가 소멸될 때 호출되는 함수로, 객체의 리소스 해제나 정리 작업을 담당한다. 일반적으로 "~" 기호와 클래스 이름을 가지는 함수로 정의되며, 객체가 소멸될 때 자동으로 호출된다.
  • 생성자와 소멸자는 객체의 생명 주기와 관련된 중요한 역할을 수행하므로, 적절하게 정의되고 사용되어야 합니다.

생성자(C++)

  • 생성자의 이름은 클래스명과 같다.

  • 클래스의 객체가 생성될 때마다 자동으로 호출된다.

  • 보통 객체가 메모리에 할당될 때 멤버변수의 초기화를 담당한다.

  • 리턴형을 쓰지 않는다.

    • 리턴값이 존재하지 않으며 void형을 지정해도 안된다.
    • C/C++언어에서는 리턴값을 생략하면 int형인데 생성자는 예외다.
  • 생성되는 객체마다 초기화 값이 다를 수 있으므로 하나의 클래스에 여러 개의 생성자가 존재할 수 있다.

  • 매개변수는 달라야한다.

  • 객체가 생기면서 자동 호출되며, 사용자가 호출할 수는 없다.

  • 생성자가 반드시 있어야 하는 것은 아니지만 메모리를 초기화 한다는 의미에서 있는 것이 좋다.

클래스명(){변수=1;} //copy initialization
클래스명():변수(1){ } //member initializer list , direct initialization
클래스명():변수{1}{ } //member initializer list , uniform initialization
변수를 1로 초기화 하는 생성자 생성법 3가지

C++ 초기화 관련글은 작성후 링크 예정

소멸자(C++)

  • 클래스의 객체가 소멸될 때 자동으로 호출된다.
  • 소멸자의 이름은 클래스명과 같고, 앞에 ~(tilde)를 붙인다.
    • 클래스명이 Dog라면 소멸자 이름은 ~Dog()
  • 하나의 클래스에 유일하다.
  • 생성자는 중첩이 가능하지만 소멸자 중첩은 불가능하다.
  • 리턴형과 매개변수가 없다.
  • 리턴값이 존재하지 않으며 void형을 지정해도 안된다.
  • 사용자가 직접 호출할 수는 없다.
~클래스명(){실행문;}