malloc的用法: 使用malloc是向系统申请一定字节的内存,申请成功返回申请到内存的首地址,否则返回NULL.
malloc和free使用是的注意事项: malloc和free是成对使用的,所以在使用malloc和free 时,不要对分配内存的指针复制操作了,因为复制后,free找不到原来的指针,会导致释放内存出现错误,free分配内存的指针的时候,必须使原本malloc过的指针。
new操作符(new operator)
比如
string *str=new string("Mermory Management.")
这里的new 便是new 操作符
它的作用有两个:一、分配足够的内存来存放所需类型的对象;二、调用构造函数来初始化内存中的对象
(作用总结:分配内存+调研用构造函数来初始化+返回相应的指针)
operator new
new操作符调用一个函数来完成必需的内存分配时,可以重写或重载这个函数来改变它的行为。new操作符为分配内存所调用函数的名字是operator new。
实验代码:
class Test
{
public:
Test()
{
cout<<"构造函数."<<endl;
}
~Test()
{
cout<<"析构函数.”<<endl;
}
void *operator new(size_t size)
{
Test *t=(Test*)malloc(sizeof(Test));
cout<<"分配内存."<<endl;
return t;
}
void operator delete(void *p)
{
free(p);
cout<<"释放内存."<<endl;
return;
}
};
运行结果:分配内存
构造函数
析构函数
释放内存
placement new(定位放置new)
一般来说,使用new申请空间时,是从系统的“堆”(heap)中分配空间。申请所得的空间的位置是根据当时的内存的实际使用情况决定的。但是,在某些特殊情况下,可能需要在已分配的特定内存创建对象,这就是所谓的“定位放置new”(placement new)操作。
定位放置new操作的语法形式不同于普通的new操作。例如,一般都用如下语句A* p=new A;申请空间,而定位放置new操作则使用如下语句A* p=new (ptr)A;申请空间,其中ptr就是程序员指定的内存首地址。