动态内存分配(new / delete) ,可类比为C中的malloc和free函数。
但是二者在某些地方有很大的区别。
如new和delete是运算符,malloc new是函数。
malloc的职责仅仅是分配内存,new除了分配内存外,还干一件事,调用构造函数。
所以new !=malloc ,但就分配内存这件事上,new操作符为分配内存所调用函数的名字是operator new。
void * operator new(size_t size);//參数size_t确定分配多少内存。 返回值类型是void*,由于这个函数返回一个未经处理(raw)的指针。未初始化的内存。(假设你喜欢。你能写一种operator new函数,在返回一个指针之前可以初始化内存以存储一些数值,可是一般不这么做。
从这个层面来说,operator new更像malloc。
operator new干了分配内存,当然还有一个函数帮new干调用构造函数初始化new
先来看new的几个简单使用情况:
1) 在堆空间分配单个值的空间
类型 *指针名 = new 类型;
delete 指针名;
eg:
int *pi = new int;
*pi = 100;
cout << *pi << endl;
delete pi;
2) 在堆空间分配数组空间
类型 *指针名 = new 类型[元素个数];
delete []指针名;
int *pi = new int[100];
pi[0] = 1;
pi[1] = 2;
delete []pi;
另一种使用情况:
SeqStack *sq=new SeqStack(64);
要详细理解这种new 和构造函数结合体的使用情况,链接再此:
C++ 中 new 操作符内幕:new operator、operator new、placement new - slgkaifa - 博客园 (cnblogs.com)
详细理解,底层探究:待补