实例化对象:有或没有New
在C中创建对象时,程序员可以使用“new”运算符或直接实例化它们没有它。虽然这两种方法都创建对象,但它们在几个关键方面有所不同。
不带 New
实例化一个不带“new”的对象会直接在当前作用域中为其保留内存。这通常在堆栈上完成,并产生具有自动生命周期的对象。对象在其定义的范围内自动创建和销毁。
例如:
Time t(12, 0, 0); // t is a Time object
在上面的代码中,“Time”对象“t”是在堆栈上创建的,并且它的生命周期绑定到当前作用域。
With New
使用“new”实例化一个对象,在堆上为其动态分配内存。这允许在对象的生命周期结束时显式地创建和销毁该对象。指针“t”存储的是对象的堆地址。
例如:
Time* t = new Time(12, 0, 0); // t is a pointer to a dynamically allocated Time object
这里,指针“t”被赋予了新创建的“Time”对象的堆地址。对象的生命周期与范围无关,并且一直持续到使用“删除”运算符释放其内存为止。
主要区别
值得注意的是,这些差异是特定于实现的,因为 C 标准没有明确定义堆栈和堆行为。然而,在大多数实际实现中,堆栈内存用于自动对象,而堆内存用于动态对象。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3