动态内存分配
采用new和delete可以在堆区分配内存。
new
new TYPE;
TYPE可以是内置类型,也可以是已知的class类型。
可以在分配内存时进行初始化:
new TYPE(init_value);
例如:
int *pi;
pi = new int;
int *pi;
pi = new int(10);
new分配数组
int *pia = new int[10];
delete释放
delete pi;
delete释放数组
释放数组必须要在delete和数组指针间,加上空的[]。
delete [] pia;
delete无需判0
if(pi != 0)
delete pi;
是多此一举的。
对数组错误的delete会发生什么
正确的构造和析构是这样成对出现的:
Student *r = new Student[10];
delete [] r;
这样,会先为10个Student类型的对象分配空间,之后逐个调用每个对象的构造函数. 在delete时,则会逐个调用每个对象的析构函数,之后再释放整个空间.
如果我们采用了错误的delete方法,只delete r
,会产生什么样的结果呢?
这会导致,只会调用首个对象的析构函数,随后删除当初申请的整个空间.
结构体也可以提供构造函数
#include<iostream>
using namespace std;
struct stru
{
int a;
stru():a(){} //无参构造
stru(int i) :a(i){}//有参构造
};
int main(int argc, char const *argv[])
{
struct stru s[5] = {stru(1), stru(2), stru(3)}; //前三个用有参,两个用无参
return 0;
}
文档信息
- 本文作者:Iven Li
- 本文链接:https://lutcraft.github.io/2023/07/26/C++%E5%9F%BA%E7%A1%80-new-delete/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)