求大神见教“在单例模式中加入嵌套类,为什么程序不能正确运行呀?环境是VC6.0”

求大神指教“在单例模式中加入嵌套类,为什么程序不能正确运行呀?环境是VC6.0”

Emperor.h
//单例模式就是在系统中只允许产生这个类的一个实例
#ifndef EMPEROR_H
#define EMPEROR_H

#pragma once

#include <iostream>

#include <string>

using namespace std;

class Emperor
{

public:

static Emperor * getInstance()//静态函数
{
if(pEmperor == NULL)
pEmperor = new Emperor();
return pEmperor;

}
static void releaseInstance()//静态函数
{
if(pEmperor != NULL)
{
delete pEmperor;
pEmperor = NULL;
}
}

void emperorInfo()
{
char msgBuffer[50] = {0};

// sprintf_s(msgBuffer, 50, "皇帝某某某: %s\n", EmperorTag.c_str() );
sprintf(msgBuffer,  "皇帝某某某: %s\n",EmperorTag.c_str());
//函数c_str()返回一个指向正规C字符串的指针

string msg(msgBuffer);

cout<<msg.c_str()<<endl;
}

void setEmperorTag(string tag)
{
EmperorTag = tag;

}

private:

Emperor()
{
cout<<"Create Emperor Instance"<<endl;
}
//以下这两个函数只声明不实现
Emperor(const Emperor&);//拷贝构造函数
Emperor& operator=(const Emperor&);//重载赋值语句

virtual ~Emperor()
{
cout<<"Destroy Emperor Instance and release its resource"<<endl;

}

static Emperor *pEmperor;//静态类指针,在类外初始化

string EmperorTag;

//注意:将嵌套类注释掉后,程序才可以正确运行!!!
/* class Garbo//嵌套类,用于释放对象及其占用资源
{

public:

Garbo()
{
cout<<"Create Garbo"<<endl;
}

~Garbo()
{
cout<<"Destroy Garbo"<<endl;
if(pEmperor != NULL)
// if(Emperor::pEmperor)
{
cout<<"Remove instance"<<endl;
delete pEmperor;
pEmperor = NULL;

}

};

static Garbo garbo;//优先释放
*/
};

Emperor* Emperor::pEmperor = NULL;//静态类指针

//Emperor::Garbo Emperor::garbo;

#endif


Singleton.cpp


#include <iostream>

using namespace std;

#include "Emperor.h"


int main()
{

Emperor *pEmperor1 = Emperor::getInstance();
pEmperor1->setEmperorTag("96");
pEmperor1->emperorInfo();

Emperor *pEmperor2 = Emperor::getInstance();
pEmperor2->emperorInfo();

Emperor *pEmperor3 = Emperor::getInstance();
pEmperor3->emperorInfo();

Emperor *pEmperor4 = pEmperor3;
pEmperor4->emperorInfo();

Emperor *pEmperor5 = NULL;
pEmperor5 = pEmperor4;
pEmperor5->emperorInfo();

Emperor::releaseInstance();

return 0;
}




------解决方案--------------------
放在一个文件中测试,便已通过:

// test2.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

//单例模式就是在系统中只允许产生这个类的一个实例

#pragma once
#include <iostream>

#include <string>

using namespace std;

class Emperor
{
private:
static Emperor *pEmperor;//静态类指针,在类外初始化

public:

static Emperor * getInstance()//静态函数
{
if(pEmperor == NULL)
pEmperor = new Emperor();
return pEmperor;

}
static void releaseInstance()//静态函数
{
if(pEmperor != NULL)
{
delete pEmperor;
pEmperor = NULL;
}
}


void emperorInfo()
{
char msgBuffer[50] = {0};

// sprintf_s(msgBuffer, 50, "皇帝某某某: %s\n", EmperorTag.c_str() );
sprintf(msgBuffer,  "皇帝某某某: %s\n",EmperorTag.c_str());
//函数c_str()返回一个指向正规C字符串的指针

string msg(msgBuffer);

cout<<msg.c_str()<<endl;
}

void setEmperorTag(string tag)
{
EmperorTag = tag;

}

private:

Emperor()
{
cout<<"Create Emperor Instance"<<endl;
}
//以下这两个函数只声明不实现
Emperor(const Emperor&);//拷贝构造函数
Emperor& operator=(const Emperor&);//重载赋值语句

virtual ~Emperor()
{
cout<<"Destroy Emperor Instance and release its resource"<<endl;

}


string EmperorTag;

//注意:将嵌套类注释掉后,程序才可以正确运行!!!
class Garbo//嵌套类,用于释放对象及其占用资源
{
public:
Garbo()
{
cout<<"Create Garbo"<<endl;
}

~Garbo()
{
cout<<"Destroy Garbo"<<endl;
if(pEmperor != NULL)
// if(Emperor::pEmperor)
{
cout<<"Remove instance"<<endl;
delete pEmperor;
pEmperor = NULL;

}
}
};

static Garbo garbo;//优先释放