上机实例之vector内存分配
来源:互联网 发布:手机淘宝店的店招尺寸 编辑:程序博客网 时间:2024/05/21 09:53
Employee.h#include<string>#include<iostream>using namespace std;class Employee{private: string name; string address; string code; float wage;public: Employee(){cout<<" 无参构造函数被凋用 "<<endl;}; ~Employee(){cout<<" 析构函数被凋用 "<<endl;}; Employee(const Employee& e){ cout << " 拷贝构造函数被调用 " << endl; }; Employee(string name,string address,string code,float wage); void change_name(string new_name); void display(); float get_wage(){return wage;}; void set_wage(float wage){this->wage=wage;};};
Employee.cpp#include"Employee.h"#include<iostream>using namespace std;Employee::Employee(string name,string address,string code,float wage){ cout<<" 有参构造函数被调用 "<<endl; this->name=name; this->address=address; this->code=code; this->wage=wage;}void Employee::change_name(string new_name){ this->name=new_name; cout<<" 姓名已更改 "<<endl;}void Employee::display(){ cout<<" 姓名 :"<<name<<endl; cout<<" 地址 :"<<address<<endl; cout<<" 邮编 :"<<code<<endl; cout<<" 工资 :"<<wage<<endl;}
我使用 new 分配了一个大小为 3 的 Employee 数组,在 vector 中通过 pushback() em1,em2,em3 ,向其中添加了 3 个元素。
结果如下:
首先分析一下构造函数和析构函数:
最前面 3 个无参构造函数是 new Employee[3] 动态分配内存时调用的;
在声明 vector : vector emVec 这个时候还没有分配内存,此时,如果调用 size() 和 capacity() 可以看到 vector 的这两个值都为 0 ;
接下来的三个无参构造函数是声明三个 Employee 调用的,好理解;
使用 pushback() 将第一个 Employee 加入 vector ,可以看到此时调用了拷贝构造函数,原因是调用 pushback() 时会给 vecotr 分配一个内存空间,再将 em1 拷贝到这个内存;
第二次调用 pushback() ,可以看到这时有调用了一次拷贝构造函数,一次析构函数再加一次拷贝构造函数,这时为什么呢?
来看一下 vector 的内存分配机制:我们知道 vector 可以使用下标来访问相应元素,那就说明 vector 容器中的元素是连续存放的。为了满足这一特性,在每次调用 pushback 都需要重新分配内存,把 vector 中已有的元素拷贝到新的内存中,将旧内存释放掉,再把本次 pushback 的元素拷贝到新内存里。
所以分析可知,在第二次调用 pushback 时,是为 vector 重新分配了两个内存空间,首先将 Employee1 拷贝到新内存,就有了一次拷贝构造函数;再将旧内存释放掉,有了一次析构函数;最后将 Employee2 拷贝到新的内存,又调用了一次拷贝构造函数。
第三次调用 pushback() 时调用了两次拷贝构造函数,两次析构函数,一次拷贝构造函数,这就不难理解了。 程序执行结束后有 9 个析构函数,分别是析构之前 new 产生的 3 个 Employee 和定义的 3 个 em1 , em2 , em3 ,以及 vector 中的 3 个。注意,通过 new 分配的内存一定要使用 delete 释放掉!
- 上机实例之vector内存分配
- STL之vector分配内存问题
- vector 内存分配
- vector内存分配
- STL---vector内存分配
- vector的内存分配
- stl-vector内存分配
- 利用vector分配动态内存
- vector的内存分配行为
- vector的内存分配行为
- vector的内存分配机制
- 动态内存分配实例
- STL中vector内存分配策略剖析
- C++ 中 vector 如何实现内存分配
- C++ 中 vector 如何实现内存分配
- vector的内存分配 新理解
- STL----vector的内存分配与释放
- STL中vector的内存分配机制
- HTML DOM基本
- 程序设计进阶 编程题#1:寻找下标
- android界面之美---自定义网络请求进度加载对话框
- 每天一个linux命令(1):ls命令
- js对table常用的操作(学习分享一)
- 上机实例之vector内存分配
- Must qualify the allocation with an enclosing instance of type AAA (e.g. x.new A() where x
- TCP三次握手四次挥手过程详解
- 【置顶】我的/etc/profile
- APP接口自动化测试JAVA+TestNG之HTTP接口测试实例
- [SCOI2005]互不侵犯King
- C# Word中设置/更改文本方向
- 数据库基本操作
- iOS Button 按钮 设置图片在文字的右边