2

クラスを指定して、このクラスから作成されるオブジェクトの数を指定された数、たとえば4に制限したいと思います。

これを達成する方法はありますか?

4

2 に答える 2

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> {
}
于 2012-06-24T15:45:14.510 に答える
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();
       }
   }
};
于 2012-06-24T15:38:12.373 に答える