我遇到的问题是,在构造类时会调用我的类析构函数。考虑以下测试程序:
#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()
我不了解上述片段的行为:
的原型std::vector::resize()
是:
void resize( size_type count, T value = T() );
因此,它将创建一个临时默认值以插入到向量中(您的构造函数调用),然后将其复制构造到向量中10次(您不记录这些值),然后销毁该临时值(您的析构函数调用)。
请注意,C ++ 11发生了变化。现在有两个重载:
void resize( size_type count );
void resize( size_type count, const value_type& value);
因此,如果使用正确的C ++ 11编译器,则将调用第一个重载,并且值将被初始化,即它将使用默认构造函数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句