我有如下代码:
class Singleton {
private:
int i;
static bool stnflag;
static Singleton* single;
Singleton(int a)
{
i=a;
}
public:
static Singleton* getinstance(int);
void function();
~Singleton()
{
cout << "destructor is being called" << endl;
stnflag=false;
}
};
bool Singleton::stnflag=false;
Singleton* Singleton::single=NULL;
Singleton* Singleton::getinstance(int a)
{
if(!stnflag)
{
single = new Singleton(a);
stnflag=true;
return single;
}
else
{
cout << "already single object created" << endl;
return single;
}
}
void Singleton::function()
{
cout << "private member value in single ton class is :" << i << endl;
}
int main()
{
Singleton *s1,*s2;
s1=Singleton::getinstance(3);
s1->function();
s2=Singleton::getinstance(4);
s2->function();
delete s1;
delete s2;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当删除s2被调用时,析构函数也被第二次调用!!但是怎么可能呢?已经删除s1 ri8中删除了对象的指针.但是我在析构函数中获取了第二个删除s2的print语句..可以任何人给出原因..但是根据我的假设,它会因为错误而错过双免费指针ri8 !!
| 归档时间: |
|
| 查看次数: |
1393 次 |
| 最近记录: |