类对象构造的一个问题
我们老师上课讲过,把类对象的构造函数设成私有,然后在局部作用域及全局作用域都不能建立类对象了,只能在类作用域里建立,好像是这个意思,当时坐得比较后,没有听清,反正意思大概就这样.还说了用什么静态成员函数之类的.
我想问下要让类对象不能在局部及全局作用域内建立,只能在堆区建立,应该怎么样实现啊?顺便解释下原理.
我们老师还说了,让类对象只能创建一个,也是要用他说的那个原理就可以完成的,即把构造函数设成私有,然后怎么怎么做我就听不到了.
请高手指点一下,把原理解释下.
[解决办法]
还有一种:
.h
class aaa
{
public:
static aaa& GetInstance();
private:
aaa();
~aaa();
};
.cpp
aaa& aaa::GetInstance()
{
static aaa one;
return one;
}
[解决办法]
To arong1234():
因为创建了不止一个对象,把那个程序加上输出信息就可以看到了:
--------------------------
#include <iostream>
class aaa
{
public:
static aaa* Instance();
private:
aaa() { std::cout < < "Create " < < std::endl; };
~aaa() { std::cout < < "Destory " < < std::endl; };
};
aaa *aaa::Instance()
{
aaa *ins = new aaa();
return ins;
}
int main()
{
aaa::Instance();
aaa::Instance();
aaa::Instance();
return 0;
}
--------------------------
一般做法是(这里没写释放的函数):
--------------------------
#include <iostream>
class TestSingleton
{
public:
static TestSingleton* GetInstance();
private:
TestSingleton() { std::cout < < "Create " < < std::endl; };
~TestSingleton() { std::cout < < "Destory " < < std::endl; };
private:
static TestSingleton * instance_;
};
TestSingleton * TestSingleton::instance_ = NULL;
TestSingleton * TestSingleton::GetInstance()
{
if ( instance_ == NULL )
instance_ = new TestSingleton();
return instance_;
}
int main()
{
TestSingleton::GetInstance();
TestSingleton::GetInstance();
TestSingleton::GetInstance();
return 0;
}
--------------------------