C++用new和不用new建立类对象区别

new建立类对象,使用完后需使用delete删除,跟申请内存相似。因此,new有时候又不太适合,好比在频繁调用场合,使用局部new类对象就不是个好选择,使用全局类对象或一个通过初始化的全局类指针彷佛更加高效。函数

1、new建立类对象与不new区别
下面是本身总结的一些关于new建立类对象特色:指针

new建立类对象须要指针接收,一处初始化,多处使用
new建立类对象使用完需delete销毁
new建立对象直接使用堆空间,而局部不用new定义类对象则使用栈空间
new对象指针用途普遍,好比做为函数返回值、函数参数等
频繁调用场合并不适合new,就像new申请和释放内存同样
2、new建立类对象实例
一、new建立类对象例子:
CTest* pTest = new CTest();对象

delete pTest;内存

pTest用来接收类对象指针。class

不用new,直接使用类定义申明:内存泄漏

CTest mTest;程序

此种普通方式建立方式,使用完后不须要手动释放,该类析构函数会自动执行。而new申请的对象,则只有调用到delete时再会执行析构函数,若是程序退出而没有执行delete则会形成内存泄漏。总结

二、只定义类指针
这跟不用new申明对象有很大区别,类指针能够先行定义,但类指针只是个通用指针,在new以前并未为该类对象分配任何内存空间。好比:let

CTest* pTest = NULL;new

但使用普通方式建立的类对象,在建立之初就已经分配了内存空间。而类指针,若是未通过对象初始化,则不须要delete释放。

三、new对象指针做为函数参数和返回值
下面是天缘随手写一个例子,不太严谨。主要示意一下类指针对象做为返回值和参数使用。

class CTest {
public:
    int a;
};

class CBest {
public:
    int b;
};

CTest* fun(CBest* pBest) {
    CTest* pTest = new CTest();
    pTest->a = pBest->b;
    return pTest;
}

int main() {     CBest* pBest = new CBest();     CTest* pRes= fun(pBest);          if(pBest!=NULL)         delete pBest;     if(pRes!=NULL)         delete pRes ;     return -1; }  

相关文章
相关标签/搜索