いくつかの静的データを持つクラスを作成しました。このようなもの:
class Object
{
public:
Object();
Object( Point center, double area );
Object( int cx, int cy, double area );
~Object();
//and other public stuffs here...
private:
Point center;
double area;
static double totalArea;
static int objCounter;
static double areaMean;
};
私が作成したコンストラクタとデストラクタよりも:
Object::Object()
{
this->setCenter( Point() );
this->setArea( 0.0 );
objCounter++;
totalArea += 0;
areaMean = totalArea / objCounter;
}
/*this is just the default constructor I
have two others that increment real area, not 0*/
Object::~Object()
{
//cout << "Destructor called!\n"; //put it just to test
objCounter--;
totalArea -= this->area;
areaMean = totalArea / objCounter;
}
したがって、私の意図は、作成されたオブジェクトの数を知ることでした。これは、合計面積と平均面積です。次のような簡単なステートメントでテストしました。
Object first;
Object second;
cout << Object::getObjCounter() << "\n";
///I have the get method implement origanally
そして、すべて大丈夫です。オブジェクト クラスがインスタンス数を正しくカウントするようになりました。単純な配列を使用してテストしました:
Object test[ 10 ];
cout << Object::getObjCounter() << "\n";
すごい... 当然のことながら機能します。動的割り当てでテストしました:
Object *test = new Object[ 10 ];
cout << Object::getObjCounter() << "\n";
delete [] test;
繰り返しますが...うまくいきます。しかし、私がしようとすると:
vector< Object > test( 10, Object() );
cout << Object::getObjCounter() << "\n";
標準出力でゼロになります...コンストラクタとデストラクタにフラグを入れて、なぜそれが起こっているのかを確認します。そして、示されているベクトルステートメントを使用すると、デストラクタが順番に呼び出されるよりも、コンストラクタがすぐに呼び出されることがわかります!!!! どうして????私には意味がありません!誰か私にこれを説明してもらえますか? さらに、ベクトルを使用して、単純な配列と同じ効果を達成するのを手伝ってくれる人はいますか? 問題は、要素の削除と追加、サイズ変更などのベクトル機能が必要ですが、車輪を再発明したくないということです。前もって感謝します。