Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에 가상 생성자가 없는 이유는 무엇입니까?

<시간/>

가상 메커니즘은 파생 클래스 개체에 대한 기본 클래스 포인터가 있는 경우에만 작동합니다.

C++에서 생성자는 가상일 수 없습니다. 클래스의 생성자가 실행될 때 메모리에 가상 테이블이 없다는 것은 아직 가상 포인터가 정의되지 않았음을 의미하기 때문입니다. 따라서 생성자는 항상 가상이 아니어야 합니다.

그러나 가상 소멸자는 가능합니다. 다음은 예입니다.

예시

#include<iostream>
using namespace std;
class b {
   public:
   b()
   { cout<<"Constructing base \n"; }
   virtual ~b()
   { cout<<"Destructing base \n"; }
};
class d: public b {
   public:
      d()
      { cout<<"Constructing derived \n"; }
      ~d()
      { cout<<"Destructing derived \n"; }
};
int main(void) {
   d *derived = new d();
   b *bptr = derived;
   delete bptr;
   return 0;
}

출력

Constructing base
Constructing derived
Destructing derived
Destructing base