鉴于一类,我想限制从这个类来给定数量的创建的对象的数量,比如4。
有没有办法做到这一点的方法?
鉴于一类,我想限制从这个类来给定数量的创建的对象的数量,比如4。
有没有办法做到这一点的方法?
其基本思想是计算在一些静态变量,创建实例的数量。 我会实现它是这样。 更简单的方式存在的,但是这其中有一定的优势。
template<class T, int maxInstances>
class Counter {
protected:
Counter() {
if( ++noInstances() > maxInstances ) {
throw logic_error( "Cannot create another instance" );
}
}
int& noInstances() {
static int noInstances = 0;
return noInstances;
}
/* this can be uncommented to restrict the number of instances at given moment rather than creations
~Counter() {
--noInstances();
}
*/
};
class YourClass : Counter<YourClass, 4> {
}
您正在寻找的实例管理模式 。 基本上,你做的是限制类的实例化的管理器类。
class A
{
private: //redundant
friend class AManager;
A();
};
class AManager
{
static int noInstances; //initialize to 0
public:
A* createA()
{
if ( noInstances < 4 )
{
++noInstances;
return new A;
}
return NULL; //or throw exception
}
};
较短的方式从构造函数抛出一个异常,但可能很难得到正确的:
class A
{
public:
A()
{
static int count = 0;
++count;
if ( count >= 4 )
{
throw TooManyInstances();
}
}
};