c++中的new和delete

1. 动态内存分配是在程序运行时从堆分配,非静态的,局部变量内存分配是在栈上;

2. 动态内存分配的用处:

(1)分配可变大小的内存,编译器一般分配指定大小,当然动态数组编译器也可以;

(2)使程序员很弹性的分配(需要内存)和释放(不再需要)内存;

 

3. 标准的变量如int a, char c[10]等都是自动分配和释放的,一般动态分配指new申请的空间,并把地址给一个指针,如int *p=new int[10];

 

4. 如果动态申请的内存,在不用时没有释放,可能会造成内存泄露;

 

5. new操作

(1)申明:pointer-variable = new data-type;

int* p=NULL
p=new int;

//或者
int *p=new int;

(2)带初始化的操作

// pointer-variable = new data-type(value);
float *p=new float(7.5)

(3)分配一内存块(数组):返回数组首地址给指针变量

// pointer-variable = new data-type[size];
int *p=new int[10]

 

6. 标准数组释放和new释放的区别

(1)标准数组的释放是编译器自动完成,如果是局部变量,可能在函数执行完或返回时释放;

(2)动态分配的数组内存一直保持,直到程序员手动释放或程序终止;

 

7. 如果内存空间不够分配,new申请可能会抛出一个异常,但使用new(nothrow)的写法会返回NULL,可以如下写法来检查指针变量:

int *p=new(nothrow) int;
if(!p)
{
    cout<<"mem alloc faied\n";
}

 

8. delete操作

// Release memory pointed by pointer-variable
delete pointer-variable; 

delete p;

delete[] q; //释放一块内存

 

上一篇:环境变量的定义


下一篇:robotframework ---- set variable if