如同C语言中的malloc,C++通过new关键字来实现

P=new T; //就相当于malloc了一块sizeof(T)的空间,并且把首地址赋值给指针P,P是类型为T*的指针(需要提前申请)

实际用法
int* pn;
pn=new int;//or int* p=new int;
*pn=5;

另外,申请数组则如下

P=new T[n]; //P仍然是T*类型的指针,指向数组首地址

int* pn;
pn=new int[100];
pn[0]=5;

用new动态分配的,需要用delete释放掉 ,否则直到程序执行结束前,都会是垃圾片段,无法再被利用:

delete pointer(必须指向动态分配的空间);

delete [] pointer; //释放动态分配数组

不用new也可以创建对象,那么区别主要是下面几点:

  • new创建类对象需要指针接收,一处初始化,多处使用

  • new创建类对象使用完需delete销毁

  • new创建对象直接使用堆空间,而局部不用new定义类对象则使用栈空间

  • new对象指针用途广泛,比如作为函数返回值、函数参数等

  • 频繁调用场合并不适合new,就像new申请和释放内存一样

​tricks:

当对象的生命周期结束的时候,会自动调用类的析构函数,所以通过在析构函数~func()中写delete会比自己在合适的逻辑处插入delete要方便。(因为对象在作用域{}外会自动调用析构,如果new出来的对象不自己实现析构会无法得到内存释放)

results matching ""

    No results matching ""