栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

C ++中的new运算符与Java中的new运算符之间的区别

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C ++中的new运算符与Java中的new运算符之间的区别

  • 在C ++中,

    T * p = new T;

  • 对于类型的对象分配足够的内存

    T

  • T
    在该内存中构造类型的对象,可能会对其进行初始化,并且

  • 返回指向该对象的指针。(指针的值与标准分配的内存的地址相同

    new
    ,但是数组形式则不必如此
    new[]
    。)

如果内存分配失败,

std::bad_alloc
则抛出类型异常,不构造任何对象,也不分配内存。

如果对象构造函数抛出异常,则(显然)没有对象被构造,内存会立即自动释放,并且传播该异常。

否则,将构造一个 动态分配的 对象,并且用户必须手动销毁该对象并释放内存,方法通常是说

delete p;

实际的分配和释放函数可以在C ++中控制。如果没有其他内容,则使用全局的预定义函数

::operator new()
,但是可以由用户 替换
;如果存在静态成员函数
T::operator new
,则将使用该成员函数。

  • 在Java中,这非常相似,只是Java的返回值
    new
    可以绑定到类型为Java的变量
    T
    (或其基数,例如
    Object
    ),并且您必须始终具有初始化程序(因此您可以说
    T x = new T();
    )。对象的生存期不确定,但是至少要保证只要任何变量仍引用该对象,并且就没有办法(也不需要)手动销毁该对象。Java没有明确的内存概念,您无法控制分配的内部。

此外,C ++允许许多不同形式的

new
表达式(所谓的 放置
形式)。它们都创建了必须手动销毁的动态存储对象,但是它们可以相当随意。据我所知,Java没有这种功能。


最大的区别可能是 使用 :在Java中,你用

new
所有的时间的一切,你 必须 要,因为它是唯一创建(类型)方式的对象。相比之下,在C
中,您几乎不应
new
在用户代码中使用裸体。C
具有不受约束的变量,因此变量本身可以是对象,这就是C ++中通常使用对象的方式。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/463537.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号