new对象数组时的内存布局
发布日期:2021-06-30 22:07:52
浏览次数:3
分类:技术文章
本文共 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2024年04月21日 08时20分27秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
how2heap-fastbin_dup_consolidate
2019-04-30
orw_shellcode_模板
2019-04-30
[fmt+shellcode]string
2019-04-30
fmt在bss段(neepusec_easy_format)
2019-04-30
python 函数式编程
2019-04-30
python编码
2019-04-30
redis cli
2019-04-30
java 解析json
2019-04-30
java http请求
2019-04-30
tensorflow 数据格式
2019-04-30
tf rnn layer
2019-04-30
tf dense layer两种创建方式的对比和numpy实现
2019-04-30
tf initializer
2019-04-30
tf keras SimpleRNN源码解析
2019-04-30
tf keras Dense源码解析
2019-04-30
tf rnn输入输出的维度和权重的维度
2019-04-30
检验是否服从同一分布
2019-04-30
tf callbacks
2019-04-30
keras、tf、numpy实现logloss对比
2019-04-30
MyBatisPlus简单入门(SpringBoot)
2019-04-30