shr*_*sva 5 c++ memory-management
删除操作符如何工作?它比free()更好吗?如果你这样做ptr=new char[10],那么删除使用delete ptr,指针如何知道要删除多少个位置.
Vla*_*lad 16
只有delete运算符,free仅作为函数存在.在C++下,我们鼓励你使用new/ deleteover malloc()/ free().
删除操作符中有一个内部"魔术".使用时创建数组new[],数组的大小存储在内存块的元数据中.delete[]利用这些信息.
所有这些当然都是编译器,OS,优化器和实现相关的.
如果你做一个非数组类型:
T t = new T;
// ...
delete t;
Run Code Online (Sandbox Code Playgroud)
它会知道要删除多少,因为它知道T有多大.如果你做一个数组:
T t* = new T[10];
// ...
delete [] t;
Run Code Online (Sandbox Code Playgroud)
它会在分配时放下一些额外的信息,告诉它要删除多少.注意,我们使用delete [] t额外的内容[]告诉它它是一个数组.如果你不这样做,它会认为它只是一个T而且只能释放那么多记忆.
delete如果您使用new和使用,请务必free使用malloc.new先做两件事就是分配内存,然后构造对象.类似地delete调用析构函数然后释放内存.malloc\free只处理内存分配和释放.
| 归档时间: |
|
| 查看次数: |
3176 次 |
| 最近记录: |