场景:
class MyClass {
public:
MyClass(){
std::cout<<"MyClass is being created!"<<std::endl;
}
~MyClass(){
std::cout<<"MyClass is being deleted!"<<std::endl;
}
}
不用new创建对象
MyClass myclass = MyClass();
是存储在栈内存中,作用域结束后就会被释放。
优点:不用担心内存泄漏,系统会自动完成内存的释放。
缺点:函数中不能返回该对象的指针,因为函数结束后,该对象的内存就被释放了。
用new创建对象
MyClass* myclass = new MyClass();
是存储在堆内存中,作用域结束后不会被释放。除非进程结束或显示调用delete释放。
优点:函数中可以放回对象的指针,因为对象在函数结束后不会被释放。
缺点:如果管理不当,不delete的话,容易造成内存泄漏。
其他
我看一些老外的程序,大多都是实用new,所以我以后也尽量使用new吧。
在java中的垃圾回收机制更方便,全部使用new,当没有这个对象引用的时候才会自动回收内存,不用担心内存泄漏。
总而言之: 无论c++还是java,都用new的方式创建对象,c++中要注意delete以免内存泄漏,java中不用担心。