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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:simple string class
下一篇:拷贝构造函数和const成员函数

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年04月14日 18时23分44秒