以下のコードでは、
- MyClass::~MyClass() デストラクタを非公開にする使用/理由/利点?
- デストラクタはプライベートであるため、デストラクタが最後にどのように呼び出されるか。
// myclass.h #include <iostream> class MyClass { public: static MyClass& GetInstance(); void Display(); private: MyClass(); virtual ~MyClass(); };
MyClass::MyClass() {
std::cout << "Constructor " << std::endl;
}
MyClass::~MyClass() {
std::cout << "Destructor" << std::endl;
}
MyClass& MyClass::GetInstance() {
static MyClass _instance;
return _instance;
}
void MyClass::Display() {
std::cout << "Hello" << std::endl;
}
// main.cpp
#include "myclass.h"
#include <iostream>
int main() {
MyClass::GetInstance().Display(); //case1
std::cout << "main finished!" << std::endl;
return 0;
}
//出力
Constructor
Hello
Destructor
// 編集
クラスのコンストラクターを公開し、GetInstance() 関数を削除した場合。
> MyClass obj;
> obj.Display();
その後、次のエラーがポップアップします
1>e:\programs\cpp_test\src\main.cpp(38): error C2248: 'MyClass::MyClass' : cannot access private member declared in class 'MyClass'
1> e:\programs\cpp_test\static_single_test.h(11) : see declaration of 'MyClass::MyClass'
1> e:\programs\cpp_test\static_single_test.h(6) : see declaration of 'MyClass'
1>e:\programs\cpp_test\src\main.cpp(38): error C2248: 'MyClass::~MyClass' : cannot access private member declared in class 'MyClass'
1> e:\programs\cpp_test\static_single_test.h(12) : see declaration of 'MyClass::~MyClass
'
質問: c++ でどのように静的なケースを処理するのですか? 私的な行動を上書きしていませんか?