我是C ++的初学者。我发现了两种对象定义方式。
演示d;
Demo * ptrD = new Demo();
cpp
中上述两个对象定义之间是否有任何区别?其中Demo是一个类
error
分配给这两个语句创建的对象的内存是否存在差异?
答案 0 :(得分:1)
当然。 第一个是从堆栈创建和分配的对象。它的范围结束后将自动删除。 有人说:
第二个是从堆中分配的。堆是操作系统为您提供的巨大内存块。有人说:
delete
delete
某点还有许多其他的轩辕,包括polimorphism,多线程环境等等。
了解记忆管理,将其视为掌握,但请及时选择unique_ptr
和shared_ptr
。
答案 1 :(得分:1)
对于Demo d;
d
将在堆栈上分配,并在程序离开当前块时自动释放。
对于Demo *d = new Demo();
d
是指向堆上分配的对象的指针。此类对象保持存在,直到使用delete
运算符明确释放:delete d
。
答案 2 :(得分:0)
不同之处在于,写Demo d;
会导致自动创建和销毁对象实例(也称为RAII),而在第二种情况下,您必须担心它。
答案 3 :(得分:0)
在第一种情况下:
Demo d;
对象将在堆栈上分配,并在声明范围保留后自动删除。
在第二种情况下:
Demo *d = new Demo();
该对象将通过免费存储/堆分配。您需要通过调用delete
运算符来显式删除对象。