여기서 우리는 소멸자가 C++에서 private인 경우의 경우를 볼 것입니다. 아이디어를 얻을 수 있는 몇 가지 예제 코드를 살펴보겠습니다.
이 코드에는 전용 소멸자가 있지만 개체가 생성되지 않으므로 오류가 발생하지 않습니다.
예시
#include사용namespace std;class my_class { private:~my_class(){ //개인 소멸자 }};int main() {}
이 프로그램에서는 하나의 개체를 만들려고 하므로 컴파일 오류가 발생하지만 컴파일러는 소멸자에 액세스할 수 없음을 알 수 있습니다. 따라서 작업 완료 후에는 파괴할 수 없습니다.
예시
#include사용namespace std;class my_class { private:~my_class() { //개인 소멸자 }};int main() { my_class obj;}
출력
[오류] 'my_class::~my_class()'는 비공개입니다
이제 해당 클래스에 대해 하나의 포인터를 생성하면 실제 객체가 생성되지 않으므로 오류가 발생하지 않습니다.
예시
#include이름 공간 사용 std;class my_class { private:~my_class() { //개인 소멸자 }};int main() { my_class *obj;}
new 연산자를 사용하여 하나의 개체를 만든 경우에도 오류가 생성되지 않습니다. 컴파일러는 메모리에서 개체를 삭제하는 것이 프로그래머의 책임이라고 생각합니다.
예시
#includenamespace std;class my_class { private:~my_class() { //개인 소멸자 }};int main() { my_class *obj =new my_class;}
출력
<전>이제 개체를 삭제하기 위해 delete 문을 추가하면 private 소멸자에 대한 오류가 생성됩니다.
예시
#include이름 공간 사용 std;class my_class { private:~my_class() { //개인 소멸자 }};int main() { my_class *obj =new my_class; 개체 삭제;}
출력
[오류] 'my_class::~my_class()'는 비공개입니다