【发布时间】:2014-04-22 13:41:26
【问题描述】:
我遇到的问题是在构造类时调用了我的类析构函数。考虑以下测试程序:
#include <iostream>
#include <vector>
using namespace std;
class X
{
public:
X() { cout << "X::X()" << endl; };
~X() { cout << "X::~X()" << endl; };
};
class Y : public X
{
public:
Y() : X() { cout << "Y::Y()" << endl; };
~Y() { cout << "Y::~Y()" << endl; };
};
int main() {
vector<Y> a;
a.resize(10);
while(true) ;
return 0;
}
输出(来自循环之前)是
X::X()
Y::Y()
Y::~Y()
X::~X()
我不明白上面sn-p的行为:
- 为什么只构造一个元素?
- 为什么要调用析构函数?
【问题讨论】:
-
如果你去掉无限循环,事情会更清楚,所以你可以看到所有的对象都被销毁了,并提供了详细的复制构造函数和赋值运算符,所以你可以看到所有元素正在构造/分配。
-
嗨@juanchopanza,感谢您的评论。因为我想让循环之前发生的破坏与由于范围结束而发生的通常破坏区分开来,所以我引入了循环。
标签: c++ inheritance constructor destructor