首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

类对象构造的一个有关问题

2012-03-01 
类对象构造的一个问题我们老师上课讲过,把类对象的构造函数设成私有,然后在局部作用域及全局作用域都不能

类对象构造的一个问题
我们老师上课讲过,把类对象的构造函数设成私有,然后在局部作用域及全局作用域都不能建立类对象了,只能在类作用域里建立,好像是这个意思,当时坐得比较后,没有听清,反正意思大概就这样.还说了用什么静态成员函数之类的.
    我想问下要让类对象不能在局部及全局作用域内建立,只能在堆区建立,应该怎么样实现啊?顺便解释下原理.
      我们老师还说了,让类对象只能创建一个,也是要用他说的那个原理就可以完成的,即把构造函数设成私有,然后怎么怎么做我就听不到了.
      请高手指点一下,把原理解释下.

[解决办法]
还有一种:
.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;
}
--------------------------

热点排行