理解对象的实例化:有或没有“new”
在编程中创建对象时,出现两种方法:使用“new”关键字或没有它的实例化。除了动态内存分配之外,还出现了一个关键问题:这两种方法之间是否存在功能区别?
让我们检查以下代码片段:
Time t (12, 0, 0); // t is a Time object Time* t = new Time(12, 0, 0); // t is a pointer to a dynamically allocated Time object
在第一行中, 't ' 变量是在本地创建的,通常在堆栈上。它包含“Time”对象的一个实例,一旦其范围结束,该实例就会被销毁。
相比之下,第二行使用“new”运算符动态分配内存并初始化该块内的“Time”对象。因此,变量“t”存储动态分配的内存的地址而不是对象本身。这种动态分配默认发生在堆上,并且需要使用“删除”来释放分配的内存。
因此,功能差异在于所创建对象的范围和生命周期。在第一种情况下,该对象是本地的,并在其作用域结束时被销毁,而在第二种情况下,该对象将一直存在,直到显式删除。
需要注意的是,变量的本地化堆栈和堆上的动态对象是常见的实现实践。然而,C 标准仅根据它们的生命周期来定义这些对象,而不是它们在内存中的物理位置。
以上是C 中的对象实例化:`new` 关键字与直接初始化?的详细内容。更多信息请关注PHP中文网其他相关文章!