栈,是存在于某作用域的一块内存空间。在函数体内声明的任何变量,其所使用的内存空间均来自于栈。
堆,是指由操作系统提供的一块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++面向对象高级编程 学习三 堆、栈和内存泄漏相关推荐

  1. c++面向对象高级编程 学习十六 vptr和vtbl

    当一个类中有一个或多个虚函数时,内存中会多一个虚指针(vptr,virtual pointer),指向一个虚表(vtbl,virtual table) 父类有虚函数,则子类一定有虚函数 在下图示意图中 ...

  2. c++面向对象高级编程 学习十 function-like classes

    本节是设计一个class,使它的行为像一个函数. 如果一个东西能接受小括号()操作符,那么这个东西就称之为函数,或像函数的东西. 下图为三个函数对()的重载,这三个类均为像函数的类,它们可接受()操作 ...

  3. c++面向对象高级编程 学习六 虚函数

    虚函数:在成员函数前面加上virtual,函数就变成了虚函数 继承函数:子类可以调用父类的函数,叫做继承了函数,即函数的调用权 三种函数: non-virtual 函数: 你不希望 derived c ...

  4. c++面向对象高级编程 学习十七 const, new, delete

    文章目录 常量成员函数 new和delete 常量成员函数 常量成员函数是不改变成员数据. 当成员函数的const和non-const版本同时存在时,const object只能调用const版本,n ...

  5. c++面向对象高级编程 学习十五 组合继承关系下的构造和析构

    文章目录 继承关系 组合关系 继承和组合 继承关系 构造由内而外,析构由外而内,内即是父类 组合关系 A拥有B, 构造由内而外,析构由外而内,内即是B 继承和组合 构造和析构顺序如图:

  6. c++面向对象高级编程 学习十四 引用

    文章目录 reference reference的常见用途 reference 变量有三种形式:值,指针,引用 int x=0; //值 int* p=&x;//指向整型的指针,地址,指针在之 ...

  7. c++面向对象高级编程 学习十三 数量不定的模板参数,auto,for

    文章目录 数量不定的模板参数 auto ranged-base for 数量不定的模板参数 void print() {} //... 表示参数的数量不定 template<typename T ...

  8. c++面向对象高级编程 学习十二 模板

    模板特化: 模板是一种泛化的形式,特化是将参数类型进行指定,写出特化的版本,当在调用下图cout<<hash()(1000);的时候,由于特化中有struct hash{ }的版本,因此会 ...

  9. c++面向对象高级编程 学习十一 类模板、函数模板、成员模板

    namespace经验谈: 团队中函数或类的名字可能会冲突,因此使用namespace进行区分. 类模板: template<typename T> 函数模板: template<c ...

最新文章

  1. OC语言大总结(上)
  2. 前谷歌工程团队负责人:如何打造一个完美的产品
  3. Android --- RecyclerViwe中使用SnapHelper报错:“An instance of OnFlingListener already set.”
  4. STM32之CAN---中断管理浅析
  5. Uva536 Tree Recovery二叉树重建(先序和中序确定二叉树,后序输出)
  6. 执行SAP Hybris install.bat遇到JavaVersionChecker版本检测失败的问题
  7. 60款很酷的 jQuery 幻灯片演示和下载
  8. wordpress函数手册_WordPress主题开发手册
  9. 大数据之-Hadoop之HDFS_HDFS的优缺点---大数据之hadoop工作笔记0049
  10. 对美食评语进行情感分析
  11. Java Agent实战
  12. ros怎么跑小车_ROS与RACECAR教程-Arduino ROS节点进行小车控制
  13. PCB表面贴片元件的手工焊接技巧
  14. keil编译器CODE、RO、RW、ZI的含义
  15. 牛逼哄哄的京东 JD-hotkey
  16. 【audio】耳机插拔/线控按键识别流程
  17. 脚本编写一个10秒的倒计时和1分10秒的倒计时
  18. python24点游戏
  19. 2014找工作总结-机会往往留给有准备的人
  20. P1053 [NOIP2005 提高组] 篝火晚会

热门文章

  1. python语言为什么叫python_Python为什么叫Python,Java又如何而来?
  2. python爬虫抓取文本_Python实现可获取网易页面所有文本信息的网易网络爬虫功能示例...
  3. 第五节:框架前期准备篇之锁机制处理并发
  4. Java对象模型-oop和klass
  5. 【Gym - 101061F】Fairness(dp,思维)
  6. 【CF - 699C】 Vacations (日程安排 dp)
  7. 【ZOJ - 2949】Coins of Luck (概率dp,期望)
  8. 【51nod - 1174 】区间中最大的数(RMQ问题,ST表,模板)
  9. oracle基表恢复,查找V$PARAMETER 基表 – 专业Oracle数据库恢复,或许是您恢复数据的最后机会@phone:13429648788 - 专业Oracle数据库恢复技术支持...
  10. 五种线程池的对比与使用