今天遇到一个和resize相关的问题,于是就测试了一下~~
代码如下:
#include <iostream>
#include <cstdlib>
#include <windows.h>
#include <vector>
struct Fuck
{
Fuck()
{
std::cout << "调用构造函数" << std::endl;
ZeroMemory(this , sizeof(*this));
}
Fuck( const Fuck & rhs)
{
std::cout << "卧槽,竟然调用了拷贝构造函数" << std::endl;
}
~Fuck()
{
std::cout << "调用析构函数" << std::endl;
}
int i;
float a;
double b;
char c[2];
};
int main(void)
{
{
std::vector<Fuck> vec(4);
std::cout << "see here" << std::endl;
vec.resize(7);
std::cout << "hey , here" << std::endl;
}
system("pause");
return 0;
}
程序的运行结果如下:
由图中我们可以知道:
执行
std::vector<Fuck> vec(4);
这一句将会调用默认构造函数,因为size是4,所以调用4次
然后:
vec.resize(7);
这一句由于新的size大于原来的size,于是先使用原来的四个元素通过拷贝构造函数构造四个新的元素,然后将原本的四个元素释放,再调用默认构造函数生成三个元素