关于C++创建一个对象的问题
C++貌似有两种创建对象的方法
class test{}
main()
{
test a;
test* b = new test();
}
请问有什么区别,哪种好?
用new的这种必须手工delete吗?
[解决办法]
test a是在栈上创建的对象;
test *b = new test()是在堆上创建的对象,
用new创建的对象必须用delete删除,否则会造成内存溢出。
在栈上创建的对象就不需要手工删除,会自动删除的。
[解决办法]
class test{
};
main()
{
test a; //栈上分配内存空间给a对象,析构函数负责释放对象
test* b = new test(); //堆中分配空间给对象,必须手动调用delete释放内存,
}
[解决办法]
动态创建对象时,只需指定其数据类型,而不必为该对象命名,是通过指针来访问此对象的。new 表达式表示在内存中分配创建了一个对象,美工返回此对象的地址,运态创建的一般会初始化。必须在析构函数中释放。使用比较灵活,但有难度。
[解决办法]
存储类型(storage class)不同:第一个在stack, 第二个在heap上。
stack:快但是大小有限,生存期不用程序干预, 不可用于线程间/进程间共享。
heap: 慢但是很大, 程序员要管理其生老病死,可用于线程间/进程间共享。
[解决办法]
参考http://blog.csdn.net/cscmaker/article/details/7019977,解说很细致。