一、解析这一段简单的代码:

class Class
{
public:char a;      char *b;                     Class::Class(){a=5;                    (1)//  * (&a+1)=5;               (3)}
};
int _tmain(int argc, _TCHAR*argv[]){Class *p=new Class[2];   (2)detele[]p;while(1);return 0;
}

二、通过代码画出的结构图

三、解析

  • (2)中 p(0x800)new出一块连续的空间,分成两份(实际就是一块)0x900和0x905:
  • 只有地址名字,没有变量名
  • 每份大小是一样,大小根据类里有多少成员属性来计算(例如这里的0x900和0x905的空间大小同是5字节,因为类里一个指针一个char变量)
  • 每份都有同样的成员变量
  • 在类里给成员变量赋值,会给多个对象的相同成员变量同时赋值((1)里a=5,0x900和0x905都会赋值为5<如图>,

像(3)里找到0x901的地址赋值,会出现0x900是cd,0x905赋值为5,后面空间地址以此类推,如果new Class[4],0x910和0x915仍然被同时赋值5<如图>

,为什么呢,new Class[n]调n次构造)

  • 在main里可以给任意对象赋值且其他对象不会赋值
  • 这样情况下用detele或detele []效果一样,将开辟的这一块连续的空间都释放

以上属于简单情况

四、复杂情况下代码:(5)代码,成员指针初始化

class Class
{
public:char a;      char *b;                    (4) Class::Class(){b=new char;                (5)}
};
int _tmain(int argc, _TCHAR*argv[])
{Class *p=new Class[2];   (2)detele[]p;while(1);return 0;
}

五、解析复杂代码

  • 1.   这样成员指针b,new出来的空间有可能连续
  • 2.   同样只有地址名没有变量名
  • 3.   New出来的每块空间大小一样,大小根据成new的大小
  • 4.   类里赋值,都会赋同样的值,main里可以单独赋值

区别在于main里用detele的时候,只会调一次析构函数,这样,0x900 0x905 0x700空间被释放,0x605……内存泄漏,用detele []p,就会调过几次构造就调几次析构,就都会释放

detele和detelp[]区别,detele用于释放new出单个对象的空间

detele[]用于释放new[]出多个对象的空间

六、通过代码画出的结构图

练习:

1.将结构图能画出

2.给其中的0x900、0x905、0x700、0x605单独赋值

解2:

发现:(p + n)->a能直接找到0x900划分的第几份的int a,(p + n)->b能直接找到0x900划分的第几份的char *b,相当于给0x700、0x605单独赋值了

C++基础之detele和detele[]相关推荐

  1. redis设置过期时间与直接detele key有什么区别

    redis设置过期时间与直接detele key有什么区别 Redis 中设置过期时间和直接删除 key 有以下几点区别: 效率:当使用 key 的过期时间时,Redis 会在 key 过期时自动删除 ...

  2. mysql opti_MySQL基础操作

    查看帮助:? 关键词 如 ? trigger 一.Mysql常用基础操作 1.mysql表复制 1) create table t2 like t1;   --复制表结构,t2与t1表结构一致 2) ...

  3. oracle数据库基础知识总结,oracle数据库基础知识学习笔记

    oracle数据库基础知识学习笔记 一.oracle数据库类型: Char:  字符型(最大长度2000,定长.不足时以空格补充) Varchar2:字符型 最大长度 4000,变长,实际长度由存储的 ...

  4. MySQL 基础知识入门教程

    前言 知识无底,学海无涯,到今天进入MySQL的学习4天了,知识点虽然简单,但是比较多,所以写一篇博客将MySQL的基础写出来,方便自己以后查找,还有就是分享给大家. 一.SQL简述 1.SQL的概述 ...

  5. 测试面试基础问答(加解析)

    非技术类 一.简述一下做的项目 1.内容包含:么么平台,是一个么么样架构,软件的作用,软件的使用,项目的(开发到发布)时间,团队的人数及比例 2.简述工作流程 参考: ⑴需求评审:项目经理通过和客户的 ...

  6. 自整理:SQL 基础复习

    目录 一.SQL简述 1.SQL的概述 2.SQL的优点 3.SQL的分类 4.数据库的三大范式 二.数据库的数据类型 1.整数类型 2.浮点数类型和定点数类型 3.字符串类型 4.文本类型 5.日期 ...

  7. sql中几种删除语句的比较和基础用法

    sql中有三种删除语句 delete.drop.truncate 1.delete 基础用法:delete from table(表名) [where] 用法理解:用于删除有明确定义的数据或者整个表的 ...

  8. jooq多表查询_二、jOOQ 系列教程 - 基础CURD

    通过 DSLContext API 和 Record API,可以完成基础CURD操作.本篇主要通过一些实例代码,讲解最基础的用法.后面的相关篇幅中,也会说到一些扩展以及其他高级用法 从此篇幅开始,以 ...

  9. oracle pl/sql 基础

    PL/SQL笔记 PL/SQL块中只能直接嵌入SELECT,DML(INSERT,UPDATE,DELETE)以及事务控制语句(COMMIT,ROLLBACK,SAVEPOINT),而不能直接嵌入DD ...

  10. [c#基础]使用抽象工厂实现三层

    引言 昨天加了一天班,今天闲来无事,就在想如何将之前的三层和最近一直在学的设计模式给联系在一起,然后就动手弄了个下面的小demo. 项目结构 项目各个层实现 Wolfy.Model层中有一个抽象类Ba ...

最新文章

  1. window.print()前端实现打印功能
  2. 混合时空图卷积网络:利用导航数据改进交通预测效果 | KDD 2020
  3. Service的线程、工作线程、权限及系统Service
  4. java中jsp页面foreach遍历输出的使用
  5. WebRTC 速成课程
  6. Nginx配置proxy_pass
  7. 机器学习算法总结--EM算法
  8. java程序知识_java的基本知识点
  9. Java 实现导出excel表 POI
  10. python_mysql
  11. Flash总弹出广告怎么办?该如何删除?
  12. 转速、电流双闭环控制的直流调速系统
  13. Book04--修改软件的艺术:构建易维护代码的9条最佳实践
  14. Arnold置乱变换的代码实现与置乱度分析
  15. Foxmail中Exchange设置账户总是提示密码错误
  16. 移动应用安全开发要求(1,源码安全)
  17. 【观察】戴尔科技+VMware:多云演进,步步为“赢”
  18. 基于flask构建微服基本demo
  19. 交换机芯片笔记1.2
  20. 故障转移之starwind共享存储篇

热门文章

  1. 美团点评 2019校招 前端方向职位试卷在线考试
  2. C# MVC获取微信openId
  3. CAD:excel 批量画矩形
  4. 华为手机html乱码,华为手机系统语言变成乱码了怎么办?
  5. java 解析josn数组
  6. 【异构图->精读】Heterogeneous Graph Attention Network
  7. android图片剪切第三方,Android第三方开源图片裁剪截取:cropper
  8. SAP-MM-PA精解分析系列之供应商(01)-基本概念及业务介绍
  9. 通用稳定DNS,国际DNS,国内DNS,公共DNS
  10. word图片撑满,word怎么让图片占满整个页面?