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; }