このコードを書いて、C++ でデストラクタの動作を調べました
#include <vector>
#include <iostream>
using namespace std;
class WrongDestructor
{
private:
int number;
public:
WrongDestructor(int number_) :
number(number_)
{}
~WrongDestructor() {
cout<<"Destructor of " <<number<<endl;
// throw int();
}
};
int main(int argc, char *argv[])
{
std::vector<WrongDestructor> wrongs;
for(int i = 0; i < 10; ++i) {
wrongs.push_back(WrongDestructor(i));
}
return 0;
}
私が興味深いと思ったのは、私のプログラムの出力です:
Destructor of 0
Destructor of 0
Destructor of 1
Destructor of 0
Destructor of 1
Destructor of 2
Destructor of 3
Destructor of 0
Destructor of 1
Destructor of 2
Destructor of 3
Destructor of 4
Destructor of 5
Destructor of 6
Destructor of 7
Destructor of 0
Destructor of 1
Destructor of 2
Destructor of 3
Destructor of 4
Destructor of 5
Destructor of 6
Destructor of 7
Destructor of 8
Destructor of 9
Destructor of 0
Destructor of 1
Destructor of 2
Destructor of 3
Destructor of 4
Destructor of 5
Destructor of 6
Destructor of 7
Destructor of 8
Destructor of 9
思ったよりもはるかに多くのオブジェクトが作成されているということです。コレクションには明らかに 10 があり、for ループでコレクションを埋めるときに次の 10 が一時オブジェクトとして作成されると予想していました。しかし、それらの数は多く、他のものよりも頻繁に作成されるものもあります。