추천, 2024

에디터의 선택

생성자와 소멸자의 차이점

때로는 객체를 활용하기 전에 객체의 일부를 초기화해야합니다. 예를 들어 스택에서 작업을 수행하기 전에 어떤 작업을 수행하기 전에 스택의 상단을 항상 0으로 설정해야합니다. 이 자동 초기화 기능은 '생성자'를 통해 수행됩니다. 객체가 파손되기 전에 일부 코드를 실행해야하는 경우입니다. 예를 들어, 객체가 파기되기 전에 열었던 파일을 닫아야하는 경우입니다. 그것은 '파괴자'의 도움으로 수행 될 수 있습니다.

비교 차트의 도움으로 생성자와 소멸자의 기본적인 차이점을 간략히 살펴 보겠습니다.

비교 차트 :

비교 근거건설자폐물 소각로
목적
메모리를 객체에 할당합니다.객체의 메모리를 할당 해제합니다.
선언class_name (있는 경우 인수) {};~ class_name (인자 없음) {};
인수생성자가 인수를 허용합니다.소멸자는 인수를 허용하지 않습니다.
부름생성자는 객체가 생성되는 동안 자동으로 호출됩니다.소멸자는 블록이 종료되거나 프로그램이 종료되면 자동으로 호출됩니다.
생성자는 객체가 이전에 값의 일부를 초기화 할 수있게합니다.Destructor를 사용하면 객체가 파기 될 때 일부 코드를 실행할 수 있습니다.
실행 명령
생성자는 연속 된 순서로 호출됩니다.
소멸자는 생성자의 역순으로 호출됩니다.
숫자로클래스에는 여러 생성자가있을 수 있습니다.그러나 클래스에는 항상 하나의 소멸자가 있습니다.
복사 생성자복사 생성자를 사용하면 생성자가 다른 객체의 객체를 선언하고 초기화 할 수 있습니다.그런 개념은 없습니다.
과부하생성자가 오버로드 될 수 있습니다.소멸자는 오버로드 될 수 없습니다.

생성자의 정의 :

생성자는 기본적으로 객체를 초기화하고 메모리를 할당하는 클래스의 멤버 함수입니다. 생성자는 클래스와 동일한 이름으로 선언되고 정의 될 때 쉽게 식별 할 수 있습니다. 생성자에는 반환 유형이 없습니다. 그래서 그들은 아무것도 반환하지 않으며, 심지어 무효가 아닙니다. 생성자는 항상 클래스의 public 섹션에 정의됩니다.

클래스에는 여러 생성자가있을 수 있습니다. 전달 된 인수의 수와 유형에 따라 구별 할 수 있습니다. 클래스 내에 복수의 생성자가있는 경우 암시 적 생성자 (아무것도하지 않는 생성자)도 함께 정의해야합니다. 아무것도하지 않고 컴파일러를 만족시킵니다.

생성자는 기본 인수를 사용하여 정의 할 수도 있습니다. 반면에 객체를 "동적으로"초기화합니다. 생성자는 상속되거나 가상 일 수 없지만 오버로드 될 수 있습니다. 그들은 그들의 주소로 언급 될 수 없다.

생성자 구현 :

 class Const {int a, b; public : Const () {// 매개 변수가없는 생성자 a = 0; b = 0; } Const (int c, int d) {// 매개 변수가있는 생성자 a = c; c = d; }}; int main () {Const C1; C2 (10, 20); //이 문장은 생성자를 호출한다} 

C1이 생성되면 파라미터가없는 생성자가 실행되고 C1은 매개 변수를 전달하지 않습니다. 반면, C2가 생성되면 생성자에 두 개의 정수를 전달하므로 매개 변수가있는 생성자가 실행됩니다.

소멸자의 정의 :

소멸자는 객체에 할당 된 메모리를 할당 해제하는 클래스의 멤버 함수이기도합니다. 물음표 (~) 기호 앞에 클래스 이름과 동일한 이름이 정의됩니다. 소멸자는 항상 생성자의 역순으로 호출됩니다.

클래스에는 하나의 소멸자가 항상 있으며 인수를 허용하지 않습니다. 로컬 객체는 실행 제어가 블록을 벗어나 자마자 파괴됩니다. 반면에 전역 객체는 전체 프로그램이 종료 될 때 파괴됩니다. 소멸자는 컴파일러에 의해 암시 적으로 호출됩니다. 클래스가 상속되고 클래스가 부모 클래스에서 파생되고 자식 클래스와 부모 클래스 모두 소멸자가있는 경우 그런 다음 파생 클래스의 소멸자가 먼저 호출되고 그 다음에 부모 클래스의 소멸자가 호출됩니다.

소멸자 구현 :

 class Const {int a, b; public : Const (int c, int d) {// 매개 변수가있는 생성자입니다. a = c; c = d; cout << a와 b의 값은 "<"입니다. 

C1 오브젝트가 생성되면 정수형의 두 개의 매개 변수를 가진 생성자가 호출되고 "a, b"값이 인쇄되지 않으면 멤버 "a, b"가 초기화됩니다. 그 소멸자가 호출되어 "object C1 get destroyed"라는 메시지를 출력합니다.

생성자와 소멸자의 주요 차이점

  1. 생성자의 주된 목적은 객체가 생성 될 때 객체에 메모리를 할당하는 것이고, 소멸자의 주된 목적은 객체가 파괴 될 때 객체의 메모리를 할당 해제하는 것입니다.
  2. 인수가 클래스의 데이터 멤버를 초기화하는 데 사용될 수 있으므로 생성자는 인수를 허용 할 수 있습니다. 소멸자는 객체의 메모리 할당을 해제하는 것만으로 모든 인수를 허용하지 않습니다.
  3. 생성자는 객체가 생성 될 때 호출됩니다. 반면에, 소멸자는 프로그램이 종료되거나 프로그램이 객체가 생성 된 블록에서 빠져 나올 때 호출됩니다.
  4. 생성자는 일반적으로 클래스의 데이터 멤버를 초기화하는 데 사용되지만 소멸자는 객체가 파손되기 전에 일부 동작을 수행하는 데 사용됩니다.
  5. 생성자는 순차적으로 실행됩니다. 즉, 기본 클래스를 상속 한 파생 클래스가 있고 파생 클래스의 개체가 만들어지면 기본 클래스의 생성자를 먼저 호출 한 다음 파생 클래스의 생성자를 호출합니다. 반면 파생 클래스의 소멸자가 먼저 호출 된 다음 기본 클래스는 소멸자가 생성자의 역순으로 실행됨을 의미합니다.
  6. 클래스에는 전달 된 숫자 인수로 식별되는 여러 생성자가있을 수 있습니다. 클래스에는 소멸자가 하나뿐입니다.
  7. 소멸자에는 그러한 개념이없는 반면에 객체가 다른 객체에서 초기화되도록하는 복사 생성자의 개념이 있습니다.
  8. 생성자는 동일한 생성자의 이름으로 다른 작업을 수행하기 위해 오버로드 될 수 있지만 소멸자는 오버로드 될 수 없습니다.

결론:

유사성 외에, 그 생성자와 소멸자는 클래스의 특별한 멤버 함수이며 같은 이름을 가지고 있습니다. 둘 다 기본적인 차이점은 메모리 할당시 '생성자'가 호출되고 ' 객체 메모리 할당 해제 시간. 생성자와 소멸자는 모두 클래스에 정의되어 있지 않아도 컴파일러에서 암시 적으로 호출됩니다.

Top