(C++ : Design-pattern) Protected constructor

Posted by : at

Category : Cpp   Design-pattern


Protected 생성자란?

  • 자기 자신은 만들 수 없지만,
  • 파생 클래스의 객체는 만들게 하고 싶을때 사용된다.
class Animal
{
protected:
    Animal() {}
};

class Dog : public Animal
{
public:
    Dog() {}    // Dog() : Animal() {} <- 컴파일러에서 이런식으로 호출됨.
};

int main()
{
    Animal a;       // error - 생성자가 불러지지 않는다.
    // 이런식으로 객체의 생성을 막을 수 있다.
    Dog d;          // ok
}

Protected 소멸자란?

  • 스택에 객체를 생성하지 못하게 하고 싶을때
  • 참조 계수 기반의 객체 수명 관리 기업에서 주로 사용된다.
#include <iostream>
using namespace std;

class Car
{
public:
    Car() {}

protected:
    ~Car() { cout << "~Car" << endl; }
};

int main()
{
    Car c;      // error - 스택에 객체를 만들 수 없다.
    // 파괴될때 소멸자를 부르지 못하기 때문이다.

    Car* p = new Car;
    delete p;   // error
    // -> 소멸을 위한 함수를 별도로 만들어줘야한다.
}
class Car
{
public:
    Car() {}

    void Destroy() { delete this; }

protected:
    ~Car() { cout << "~Car" << endl; }
};

About Taehyung Kim

안녕하세요? 8년차 현업 C++ 개발자 김태형이라고 합니다. 😁 C/C++을 사랑하며 다양한 사람과의 협업을 즐깁니다. ☕ 꾸준한 자기개발을 미덕이라 생각하며 노력중이며, 제가 얻은 지식을 홈페이지에 정리 중입니다. 좀 더 상세한 제 이력서 혹은 Private 프로젝트 접근 권한을 원하신다면 메일주세요. 😎

Star
Useful Links