vector::resize

来源:互联网 发布:网络被骗2000报警么 编辑:程序博客网 时间:2024/06/03 23:27

今天遇到一个和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,于是先使用原来的四个元素通过拷贝构造函数构造四个新的元素,然后将原本的四个元素释放,再调用默认构造函数生成三个元素

0 0