C++中对象实例化时有如下两种方法:1、类名 对象名(参数)2、类名 对象名=new 类名(参数);两者的区别?

2024-12-01 12:20:31
推荐回答(3个)
回答1:

前一种是在栈区申慎游尘请。后一种是在堆区申请。(后一种应该是宽禅 类名* 对象名=new 类名(参数))
例如在函数fun中的两个对象
fun()
{
BASE a;
BASE* b = new BASE();
}
当函数fun执行结束后,a会自动调用BASE的析构函数,磨丛结束自己的生命
而b指向的对象不会结束自己的生命。你必须手动调用delete b
如果你使用new申请,要记住写delete否则会造成内存泄漏(虽然小程序可能不在乎这点泄漏)。

回答2:

1、类名 对象名(参数); 定义了一个对象(静态内存中)
2、类名 *对象名 = new 类名(参数); 在动态内存中申请一块空间,并在这块空间中填写必要的参数,然后将该对象的地址返回汪橘给对象名的指针。要记住的是,你申请的空烂陪间需要困历团显式释放。

回答3:

一个是在stack,一个是在heap