Xol*_*lve 6 c++ constructor destructor
这是代码(也在http://pastebin.com/yw5z2hnG):
#include <iostream>
#include <vector>
using namespace std;
class X
{
public:
int i;
X();
~X();
};
X::X()
{
i = 1;
cout << "---constructor" << '\n';
}
X::~X()
{
cout << "***desctructor" << '\n';
}
int main()
{
vector<X> *vx = new vector<X>;
cout << "------------------------------------" << endl;
vx->push_back(X());
vx->push_back(X());
vx->push_back(X());
vx->push_back(X());
vx->push_back(X());
cout << "------------------------------------" << endl;
delete vx;
}
Run Code Online (Sandbox Code Playgroud)
我得到的输出为:
------------------------------------
---constructor
***desctructor
---constructor
***desctructor
***desctructor
---constructor
***desctructor
***desctructor
***desctructor
---constructor
***desctructor
---constructor
***desctructor
***desctructor
***desctructor
***desctructor
***desctructor
------------------------------------
***desctructor
***desctructor
***desctructor
***desctructor
***desctructor
Run Code Online (Sandbox Code Playgroud)
我不明白为什么这么多的析构函数被称为.
CB *_*ley 14
如果您定义自己的复制构造函数,您将看到正在构造的其他对象:
class X
{
public:
int i;
X(const X&);
X();
~X();
};
X::X(const X& x) : i( x.i )
{
cout << "---copy constructor\n";
}
// ... rest as before
Run Code Online (Sandbox Code Playgroud)
如果您没有声明自己的日志,编译器将提供一个不执行日志记录的复制构造函数.