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에 해당 클래스의 개체를 생성할 수는 없지만, 상속한 경우에는 가능하다.
'프로그래밍 > C++' 카테고리의 다른 글
복사 생성자 (0) | 2017.11.09 |
---|---|
클래스 초기화 방법 정리 (0) | 2017.11.08 |
선언부와 구현부를 분리할 때 주의해야 할 것 정리 (0) | 2017.11.08 |
C와 C++의 cast (0) | 2017.10.08 |
후위 반환 형식 trailing return type/ suffix return type (0) | 2017.10.08 |