クラスの名前が A であるとすると、型 A のオブジェクトはコンストラクターまたはコピー構築を通じて構築する必要があります。その後、コンストラクターとコピー構築で 2 つの静的メンバー変数、++ 変数をそれぞれ定義できるため、毎回次のようになります。作成されたオブジェクトと変数は ++ 1 回なので、当然使いやすいです。次のように:
class A
{
public:
A()
{
++_count1;
}
A(const A& aa)
{
++_count2;
}
static int GetCount1()
{
return _count1;
}
static int GetCount2()
{
return _count2;
}
private:
static int _count1;
static int _count2;
};
int A::_count1 = 0;
int A::_count2 = 0;
A Func(A a)
{
A copy(a);//1
return copy;//2
}
int main()
{
A a1;
A a2=Func(a1);//3
cout << a1.GetCount1() << endl;//1
cout << a2.GetCount2() << endl;//3
cout << A::GetCount1() + A::GetCount2() << endl;//4
}
ここでグローバル変数 (count1 および count2) を使用することもできますが、お勧めしません。単純なプログラムでは問題なく使用できますが、プロジェクト内でグローバル変数を使用するとリンク競合が発生する可能性があるため、静的メンバー変数を使用することをお勧めします。