据我所知,new
操作员会执行以下操作:(如果我错了,请纠正我。)
运算符也new[]
以类似的方式工作,只是它对数组中的每个元素都执行此操作。
谁能告诉我这两个运算符在C ++和Java中有何不同:
在C ++中,T * p = new T;
…
对于类型的对象分配足够的内存T
,
T
在该内存中构造类型的对象,可能会对其进行初始化,并且
返回指向该对象的指针。(指针的值与标准分配的内存的地址相同new
,但是数组形式则不必如此new[]
。)
如果内存分配失败,std::bad_alloc
则抛出类型异常,不构造任何对象,也不分配内存。
如果对象构造函数抛出异常,则(显然)没有对象被构造,内存会立即自动释放,并且传播该异常。
否则,将构造一个 动态分配的 对象,并且用户必须手动销毁该对象并释放内存,方法通常是说delete p;
。
实际的分配和释放函数可以在C ++中控制。如果没有其他内容,则使用全局的预定义函数::operator new()
,但是可以由用户 替换
;如果存在静态成员函数T::operator new
,则将使用该成员函数。
new
可以绑定到类型为Java的变量T
(或其基数,例如Object
),并且您必须始终具有初始化程序(因此您可以说T x = new T();
)。对象的生存期不确定,但是至少要保证只要任何变量仍引用该对象,并且就没有办法(也不需要)手动销毁该对象。Java没有明确的内存概念,您无法控制分配的内部。此外,C ++允许许多不同形式的new
表达式(所谓的 放置
形式)。它们都创建了必须手动销毁的动态存储对象,但是它们可以相当随意。据我所知,Java没有这种功能。
最大的区别可能是 使用 :在Java中,你用new
所有的时间的一切,你 必须 要,因为它是唯一创建(类型)方式的对象。相比之下,在C
中,您几乎不应
new
在用户代码中使用裸体。C
具有不受约束的变量,因此变量本身可以是对象,这就是C ++中通常使用对象的方式。
本文向大家介绍详解C++中new运算符和delete运算符的使用,包括了详解C++中new运算符和delete运算符的使用的使用技巧和注意事项,需要的朋友参考一下 C++ 支持使用 new 和 delete 运算符动态分配和释放对象。这些运算符为来自称为“自由存储”的池中的对象分配内存。 new 运算符调用特殊函数 operator new,delete 运算符调用特殊函数 operator de
在C语言中,动态分配内存用 malloc() 函数,释放内存用 free() 函数。如下所示: 在C++中,这两个函数仍然可以使用,但是C++又新增了两个关键字,new 和 delete:new 用来动态分配内存,delete 用来释放内存。 用 new 和 delete 分配内存更加简单: new 操作符会根据后面的数据类型来推断所需空间的大小。 如果希望分配一组连续的数据,可以使用 new[]
问题内容: 和运算符之间有什么区别,它们的用例是什么?他们俩似乎都是为了一项任务? 问题答案: 仅是赋值运算符。 是Short变量声明子句语法的一部分。 though虽然有一些规则。
问题内容: 如果移位的数字为正,>>>和>>的工作原理相同。 如果移位数为负,>>>将最高有效位填充为1,而>>操作将MSB填充为0。 我的理解正确吗? 如果负数是在MSB设置为1的情况下存储的,而不是Java使用2s补码的方式,则运算符的行为将完全不同,对吗? 问题答案: 表示负数的方式称为2的补码。为了演示其工作原理,以-12为例。12的二进制值为00001100(假设整数为8位,尽管实际上它
问题内容: 和之间有什么区别?它们都创建一个类的实例,我不确定它们之间有什么区别。 问题答案: 在操作创建一个是静态已知的(在编译时),并可以调用你想创建对象的任何构造一个类型的新对象。这是创建对象的首选方式- 快速且JVM对它进行了许多积极的优化。 是一个动态构造,用于查找具有特定名称的类。它比使用速度慢,因为无法将对象的类型硬编码到字节码中,并且因为JVM可能必须执行权限检查以确保您有权创建对
当我运行这段代码时,我得到以下错误截图 50:7:错误:与“操作员”不匹配