1. 생성자가 protected/private인 경우


생성자가 protected/private인 경우 일반적으로는 개체를 생성할 수가 없다.



이런 경우는 별도의 public static 함수를 제공해서 개체를 리턴시키는 경우이다.



참고링크: https://isocpp.org/wiki/faq/ctors#named-ctor-idiom



2. 소멸자가 protected/private인 경우


소멸자가 protected/private인 경우엔 stack에 해당 클래스의 변수를 생성할 수 없다.

이는 컴파일 시 stack 변수가 있는 bracket이 끝나면 소멸자를 호출해야 하는데, 소멸자가 protected/private 이어서 호출할 수 없기 때문이다.



이 경우는 해당 변수를 heap에 생성하면 된다. Heap 변수는 bracket이 끝나도 소멸자가 불리지 않기 때문이다.


다만 이 경우도 delete를 통해 heap 변수를 제거하려 하면 에러가 나기 때문에, 별도의 자기 자신을 파괴하는 destroy 함수를 제공해야 한다.




3. Protected 생성자/소멸자인 경우


Protected 생성자/소멸자인 경우에는 stack에 해당 클래스의 개체를 생성할 수는 없지만, 상속한 경우에는 가능하다.




+ Recent posts