从类限制对象实例化的数字的给定数(Restrict the number of object ins

2019-06-25 17:36发布

鉴于一类,我想限制从这个类来给定数量的创建的对象的数量,比如4。

有没有办法做到这一点的方法?

Answer 1:

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

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


Answer 2:

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

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


文章来源: Restrict the number of object instantiations from a class to a given number