#include <iostream>
using namespace std;
class MonsterDB
{
private:
~MonsterDB() {}; //private destructor
public:
static void DestroyInstance(MonsterDB* pInstance)
{
//static member can access private destructor
delete pInstance;
}
//...other methods
};
int main()
{
// instantiation in heap
MonsterDB* pMyDatabase = new MonsterDB();
MonsterDB::DestroyInstance(pMyDatabase);
return 0;
}
伙计们,为什么只有静态成员才能访问私有析构函数?
当我从中删除静态时:
static void DestroyInstance(MonsterDB* pInstance)
出现错误!
我问这个问题的原因是:
#include <iostream>
using namespace std;
class MonsterDB
{
private:
int variable;
public:
void printer()
{
cout<<variable<<endl;
}
void instancer(int s)
{
variable = s;
}
//...other methods
};
int main()
{
MonsterDB obj1;
int var = 5;
obj1.instancer(var);
obj1.printer();
}
在我制作的上述代码中,两个函数:printer 和 instancer 都访问了私有变量,而无需在这些函数中指定 static 关键字。
抱歉耽误您的时间,提前谢谢!希望在这背后给出真正的直觉。
答案 0 :(得分:1)
您可能还记得,static
(在此上下文中)表示该函数的行为类似于全局函数,这意味着它不绑定到该类的单个实例。 >
MonsterDB::DestroyInstance(pMyDatabase);
显然,如果 DestroyInstance
不是 static
,此行将始终失败(并且与私有析构函数无关)。这样称呼
pMyDatabase->DestroyInstance(pMyDatabase);
即使方法不是静态的也能工作(虽然很别扭,但把这个方法设为静态更有意义)。