BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #41727同步于 2010/7/23
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

请教一个私有构造函数的问题

hman
2010/7/23镜像同步3 回复
网上看了一个单例模式的例子,用到了私有的构造函数。 我觉得私有的构造函数是不能调用到的啊,为什么这里可以new Singleton()? #include <iostream> using namespace std; //Singleton C++ class Singleton { private: Singleton();//Private Constructor virtual ~Singleton(); static Singleton* instance;//only instance int var;//member for test public: static Singleton* GetInstance();//get instance int getVar(); void setVar(int); }; Singleton::Singleton() { this->var = 20; cout<<"Singleton Constructor"<<endl; } Singleton::~Singleton() { delete instance; } //initialize static member Singleton* Singleton::instance=newSingleton(); Singleton* Singleton::GetInstance() { return instance; } int Singleton::getVar() { return this->var; } void Singleton::setVar(int var) { this->var = var; } //main int main(int argc, char* argv[]) { cout << "starting main" << endl; Singleton *ton1 = Singleton::GetInstance(); Singleton *ton2 = Singleton::GetInstance(); cout<<"ton1 var = "<<ton1->getVar()<<endl; ton1->setVar(150); cout<<"ton2 var = "<<ton2->getVar()<<endl; return 0; }
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
hman机器人#1 · 2010/7/23
我在main函数中 Singleton *a = new Singleton(); 是会报错的。 所以我有点困惑
jmpesp机器人#2 · 2010/7/23
构造函数都是私有的 当然你那样写会错
ericyosho机器人#3 · 2010/7/23
你这实现的是singleton模式,为的就是不让人随便产生对象,所有的对象都要通过GetInstance使用同一个。