将对象实例化的数量从类限制为给定数量

时间:2012-06-24 15:35:47

标签: c++ object instantiation

给定一个类,我想将从这个类创建的对象数量限制为给定的数字,比如4。

有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:5)

基本思想是计算某些静态变量中创建的实例的数量。我会像这样实现它。存在更简单的方法,但这个方法有一些优点。

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> {
}

答案 1 :(得分:3)

您正在寻找实例管理器模式。基本上你所做的是将该类的实例化限制为管理器类。

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();
       }
   }
};