64,682
社区成员
发帖
与我相关
我的任务
分享
当我们使用 operator new 为一个自定义类型对象分配内存时,实际上我们得到的内存要比实际对象的内存大一些,
这些内存除了要存储对象数据外,还需要记录这片内存的大小,此方法称为 cookie。这一点上的实现依据不同的编
译器不同。(例如 MFC 选择在所分配内存的头部存储对象实际数据,而后面的部分存储边界标志和内存大小信息。
g++ 则采用在所分配内存的头 4 个自己存储相关信息,而后面的内存存储对象实际数据。)
当我们使用 delete operator 进行内存释放操作时,delete operator 就可以根据这些信息正确的释放指针所指向
的内存块。
struct Test1
{
char* pTest;
int iX;
int iY;
};
struct Test2
{
char szTest[128];
char szTest2[2];
};
void CMFCTestDlg::OnBnClickedOk()
{
Test1* pTest = new Test1;
Test2* pTest2 = new Test2;
delete pTest;
delete pTest2;
}