摘 要 在用VC开发时常常需要对内存进行操作,其中C++中提供了运算符new与delete;而C语言库中提供有malloc和free。它们在具体使用时存在着一些差别,文中主要解析VC6.0中为类对象申请内存的过程。
关键词 VC6.0,内存申请,C++,new,delete
1概述
在用VC开发时常常需要对内存进行操作,其中C++中提供了运算符new与delete;而C语言库中提供有malloc与free。它们在具体使用时存在着一些差别,大家也可能有一些疑问;如:为什么C++运算符new在为类对象申请内存时会调用类的构造函数而malloc则不会;为什么用new申请一个对象数组时就必须用delete[]释放而申请一个long类型的数组就能用delete释放,new一个对像与new一个对象数组以及new一个基本数据类型的数组有什么不同;为什么用new申请一个对象用delete[]释放有时会出错,而有时就成功。文中主要解析VC中为类对象申请内存的过程,同时解答上述几个疑问,希望能给大家予以一定帮助。在此说明一下试验的环境:VC6.0编译环境,IDE5.0。
2 malloc 与 new
这两个操作的区别主要是在申请一个类的对象时,malloc不会调用类对象的构造函数而new会调用,这里定义一个类用来实际测试,下面将以这个类为基础讨论malloc与new的差别。
long g_Number = 0;
class CMemoryItem
{
public:
CMemoryItem()
{
m_info.Format("Construct CMemoryItem Nember[%d] \n", ++g_Number);
OutputDebugString(m_info);
}
virtual ~CMemoryItem()
{
m_info.Replace("Construct","Destructor");
OutputDebugString(m_info);
g_Number--;
}
private:
CString m_info;
};
|