c++面向对象高级编程 学习三 堆、栈和内存泄漏
栈,是存在于某作用域的一块内存空间。在函数体内声明的任何变量,其所使用的内存空间均来自于栈。
堆,是指由操作系统提供的一块global内存空间,程序可动态分配获得若干内存空间块。
new操作符生成的对象所占用的内存空间即是从堆中动态分配所得。
c1所占用的空间来自栈,c2来自堆。
c1在作用域结束之后消失,内存会被自动清理。
c2是heap object,其生命在被delete时结束,若其作用域结束,还没有被delete,则c2所指向的heap object依然存在,但c2的生命结束了,作用域之外不再有c2,也就没机会delete c2了,因此会产生内存泄漏
c3是static object,在作用域结束之后仍然存在,直到整个程序结束。
class Complex { … };
...
{Complex c1(1,2);
Complex* c2 = new Complex(3);
static Complex c3(1,2);
}
new操作:先分配内存再调用构造函数
delete操作:先调用析构函数,再释放内存
array new 一定要搭配 array delete
c++面向对象高级编程 学习三 堆、栈和内存泄漏相关推荐
- c++面向对象高级编程 学习十六 vptr和vtbl
当一个类中有一个或多个虚函数时,内存中会多一个虚指针(vptr,virtual pointer),指向一个虚表(vtbl,virtual table) 父类有虚函数,则子类一定有虚函数 在下图示意图中 ...
- c++面向对象高级编程 学习十 function-like classes
本节是设计一个class,使它的行为像一个函数. 如果一个东西能接受小括号()操作符,那么这个东西就称之为函数,或像函数的东西. 下图为三个函数对()的重载,这三个类均为像函数的类,它们可接受()操作 ...
- c++面向对象高级编程 学习六 虚函数
虚函数:在成员函数前面加上virtual,函数就变成了虚函数 继承函数:子类可以调用父类的函数,叫做继承了函数,即函数的调用权 三种函数: non-virtual 函数: 你不希望 derived c ...
- c++面向对象高级编程 学习十七 const, new, delete
文章目录 常量成员函数 new和delete 常量成员函数 常量成员函数是不改变成员数据. 当成员函数的const和non-const版本同时存在时,const object只能调用const版本,n ...
- c++面向对象高级编程 学习十五 组合继承关系下的构造和析构
文章目录 继承关系 组合关系 继承和组合 继承关系 构造由内而外,析构由外而内,内即是父类 组合关系 A拥有B, 构造由内而外,析构由外而内,内即是B 继承和组合 构造和析构顺序如图:
- c++面向对象高级编程 学习十四 引用
文章目录 reference reference的常见用途 reference 变量有三种形式:值,指针,引用 int x=0; //值 int* p=&x;//指向整型的指针,地址,指针在之 ...
- c++面向对象高级编程 学习十三 数量不定的模板参数,auto,for
文章目录 数量不定的模板参数 auto ranged-base for 数量不定的模板参数 void print() {} //... 表示参数的数量不定 template<typename T ...
- c++面向对象高级编程 学习十二 模板
模板特化: 模板是一种泛化的形式,特化是将参数类型进行指定,写出特化的版本,当在调用下图cout<<hash()(1000);的时候,由于特化中有struct hash{ }的版本,因此会 ...
- c++面向对象高级编程 学习十一 类模板、函数模板、成员模板
namespace经验谈: 团队中函数或类的名字可能会冲突,因此使用namespace进行区分. 类模板: template<typename T> 函数模板: template<c ...
最新文章
- OC语言大总结(上)
- 前谷歌工程团队负责人:如何打造一个完美的产品
- Android --- RecyclerViwe中使用SnapHelper报错:“An instance of OnFlingListener already set.”
- STM32之CAN---中断管理浅析
- Uva536 Tree Recovery二叉树重建(先序和中序确定二叉树,后序输出)
- 执行SAP Hybris install.bat遇到JavaVersionChecker版本检测失败的问题
- 60款很酷的 jQuery 幻灯片演示和下载
- wordpress函数手册_WordPress主题开发手册
- 大数据之-Hadoop之HDFS_HDFS的优缺点---大数据之hadoop工作笔记0049
- 对美食评语进行情感分析
- Java Agent实战
- ros怎么跑小车_ROS与RACECAR教程-Arduino ROS节点进行小车控制
- PCB表面贴片元件的手工焊接技巧
- keil编译器CODE、RO、RW、ZI的含义
- 牛逼哄哄的京东 JD-hotkey
- 【audio】耳机插拔/线控按键识别流程
- 脚本编写一个10秒的倒计时和1分10秒的倒计时
- python24点游戏
- 2014找工作总结-机会往往留给有准备的人
- P1053 [NOIP2005 提高组] 篝火晚会
热门文章
- python语言为什么叫python_Python为什么叫Python,Java又如何而来?
- python爬虫抓取文本_Python实现可获取网易页面所有文本信息的网易网络爬虫功能示例...
- 第五节:框架前期准备篇之锁机制处理并发
- Java对象模型-oop和klass
- 【Gym - 101061F】Fairness(dp,思维)
- 【CF - 699C】 Vacations (日程安排 dp)
- 【ZOJ - 2949】Coins of Luck (概率dp,期望)
- 【51nod - 1174 】区间中最大的数(RMQ问题,ST表,模板)
- oracle基表恢复,查找V$PARAMETER 基表 – 专业Oracle数据库恢复,或许是您恢复数据的最后机会@phone:13429648788 - 专业Oracle数据库恢复技术支持...
- 五种线程池的对比与使用