1,malloc/calloc/realloc三者之间的区别?
void* malloc(字节数)
void* calloc (元素个数,元素大小):初始化 0
void* realloc (void* p ,size )
p---->NULL:malloc
非空:size---->变小--->缩小原空间
非空:size---->变大--->不能原地扩展的话,就重新找一块空间
2,malloc/free 和new/delete的区别
@new/delete会调用 构造和析构函数,malloc/free不会,因为malloc出来得空间不是一个完整的对象
new操作符的作用:
@申请对象的空间:
调用oparetor new 函数,用 malloc连续申请,直到申请成功
如果申请失败,是否有空间不足的应对措施,有:继续申请,没有:抛异常
@调用构造函数,初始化对象
deleete操作符的作用:
@调用析构函数,清理对象的资源
@销毁对象空间
调用operator delete函数,用free进行销毁
T* pt=new T [n]的具体实现:
@调用operator new [ ] ( sizeof (T) * n+4 ),
--->operator new (sizeof (T)*n + 4)
---->malloc
pt 是operator new [ ] 返回值向后偏移4个字节的位置
除了会申请所需的对象资源外,还会额外申请4个字节,用来保存本次申请对象的个数,为了让delete知道应该释 放的次数
delete [ ] pt;的具体实现:
1,清空资源
>>pt 先前偏移四个 字节,取对象个数(调用析构函数的次数)
>>for()调用析构函数去释放对象涉及的资源
2,释放空间
operator delete [ ] ----> operator delete ---->free (pt)
注意:pt是基类指针就只调用基类的析构函数,pt是派生类指针就先调用派生类指针,再调用基类指针。