new对象数组时的内存布局
发布日期:2021-06-30 22:07:52
浏览次数:2
分类:技术文章
本文共 2482 字,大约阅读时间需要 8 分钟。
#include#include using namespace std;#define SAFE_DELETE(x) \{ \ if (NULL != (x)) \ { \ delete (x); \ (x) = NULL; \ } \}#define SAFE_DELETE_ARY(x) \{ \ if (NULL != (x)) \ { \ delete[] (x); \ (x) = NULL; \ } \}class CA{public: CA() { setter_m_iTest(-1); } ~CA() {} void setter_m_iTest(int iIn) {m_iTest = iIn;} int getter_m_iTest() {return m_iTest;}private: int m_iTest;};void fnTestClass();void clear_cin();int main(int argc, char** argv, char** envp){ fnTestClass(); cout << "END, press any key to quit" << endl; clear_cin(); getchar(); return 0;}void fnTestClass(){ int i = 0; int iTmp = 0; const int iCntAry = 4; CA* pCaAry = NULL; CA* pCa = NULL; /** new 单个对象时的内存布局 + pCa 0x00883e30 00883E30 01 00 00 00 .... ///< pCa */ pCa = new CA; if (NULL != pCa) { pCa->setter_m_iTest(1); SAFE_DELETE(pCa); ///< delete后, 原来的数据变为 EE FE EE FE } /** new对象数组时的内存布局 + pCaAry 0x007d3ddc 007D3DD8 04 00 00 00 .... ; ///< 类数组元素个数 = 4 007D3DDC 00 00 00 00 .... ; ///< 类数组开始, CA[0] 007D3DE0 01 00 00 00 .... ; ///< CA[1] 007D3DE4 02 00 00 00 .... ; ///< CA[2] 007D3DE8 03 00 00 00 .... ; ///< CA[3] */ pCaAry = new CA[iCntAry]; if (NULL != pCaAry) { for (i = 0; i < iCntAry; i++) { pCaAry[i].setter_m_iTest(i); } } SAFE_DELETE_ARY(pCaAry); /** 手工模拟delete删除单个对象 */ pCa = new CA; if (NULL != pCa) { pCa->setter_m_iTest(1); if (NULL != pCa) { pCa->~CA(); free(pCa); ///< ok pCa = NULL; } } /** 手工模拟delete删除对象数组 会报错, 和实际情况不同 以后再研究 :( */ // 会报错, 和实际情况不同// pCaAry = new CA[iCntAry];// if (NULL != pCaAry)// {// iTmp = *((int*)pCaAry - 1);// for (i = 0; i < iTmp; i++)// {// pCaAry[i].setter_m_iTest(i);// pCaAry[i].~CA();// }// // free(pCaAry); ///< ! crash// pCaAry = NULL;// } // 会报错, 和实际情况不同// pCaAry = new CA[iCntAry];// if (NULL != pCaAry)// {// iTmp = *((int*)pCaAry - 1);// for (i = 0; i < iTmp; i++)// {// pCaAry[i].setter_m_iTest(i);// pCaAry[i].~CA();// free(pCaAry + i); ///< ! crash// }// // pCaAry = NULL;// }}void clear_cin(){ cin.clear(); cin.sync();}
转载地址:https://lostspeed.blog.csdn.net/article/details/50300867 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2024年04月14日 18时23分44秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
技术转管理?这些“坑”你要绕道走
2019-04-30
领域驱动设计(DDD)前夜:面向对象思想
2019-04-30
Ubuntu 14.04 安装TM2009/QQ
2019-04-30
Ubuntu 14.04 安装VMware
2019-04-30
如何解决Linux下USB设备节点名不固定问题
2019-04-30
Camera驱动调试小记
2019-04-30
linux内核input子系统解析
2019-04-30
platform_get_resource 如何获取资源
2019-04-30
platform_device和platform_driver
2019-04-30
Android触摸屏校准方法
2019-04-30
input_set_abs_params
2019-04-30
linux嵌入式系统开发之触摸屏---驱动篇(上/硬件原理\下/源码分析)
2019-04-30
对于中断函数返回值的分析
2019-04-30
x210——Android睡眠唤醒串口打印信息
2019-04-30
tianxiawuzhei_linux中触摸屏驱动的实现——基于s3c6410处理器
2019-04-30
四线触摸屏原理
2019-04-30
Hi-Z(高阻态)
2019-04-30
小议Linux staging tree
2019-04-30
内核配置中的:USB Gadget Support
2019-04-30