消息关闭
    暂无新消息!
如例:
class ClassA
{
public:
~ClassA();

static ClassA *GetInstance();
static void DestroyInstance();

bool Start(void) { }
void Stop(void) { DestroyInstance(); }
private:
static ClassA *A;
ClassA();
};

ClassA *ClassA::A = NULL;
ClassA *ClassA::GetInstance()
{
       if(NULL == A)
{
A = new ClassA;
}

return A;
}

void ClassA::DestroyInstance()
{
if (NULL != A)
{
delete A;
A= NULL;
}
}

ClassA:GetInstance->Start();

//此处如果这样调用,C++内部将会作何处理?
ClassA:GetInstance->Stop();

//以上我并不是想推崇这种做法,指示想深究下其过程。使用类对象的非静态函数调用静态方法来释放该类的实例,那么释放完毕,程序理应该从 Stop() 函数返回,而这个 Stop() 函数是只有类对象存在时才有效的......

7个回答

︿ 2
另外你的代码从字面上看有些问题
一般单例是为了系统中唯一的一个对象
start 和 stop 只是他的一个状态,并不是生死
例如sqlservrer的管理器,维护着一个sql实例
stop 只是让它停下,而是摧毁它。

︿ 1
比方一个软件的配置文件信息,内存中只需要一份就够了,那就可以采用这种方式

但是有个问题,多线程可能会重复创建
︿ 0
嗯,我感觉也是有问题的。正如您所说的,有问题,但就是想深入类对象的创建与释放的层面来理解这里被后的问题。
︿ 0
void Stop(void) { DestroyInstance(); }//这种调用会有问题的,尽量不要在类的非静态函数中释放自己。