怎么用new定义一个类数组,并且释放内存

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么用new定义一个类数组,并且释放内存相关的知识,希望对你有一定的参考价值。

new 分配内存
通用格式是:类型名 * 指针 = new 类型名;
如 int * pi = new int;
类型可以是基本数据类型、结构体、自定义类等
delete 来释放内存
通用格式是:delete 指针名;
注意 delete 与 new 配对,只能释放 new 分配的内存。
delete只能用一次,不能释放指针两次。
new 创建动态数组
通用格式是:类型名 * 指针 = new 类型名 [ 数组大小 ];
如 char * pc = new char [234];
pc 被赋值为第一个元素的地址,指向第一个元素
delete 释放动态数组
通用格式是: delete [] 指针;
new 创建的动态数组,指针可当作数组名来使用
如 float * pf = new float [200];
pf[24],是数组的第25个元素的值,下标从0开始
new 和 delete 是C++中用来动态分配内存的,C语言使用 malloc 和 free
参考技术A 这个说法是正确的。

解释:java中new的含义就是对某个对象进行初始化操作。说直白一点,就是逗创建地操作。但是其实此时并没有进行对象赋值,之后必须赋值给一个对象才是有实际意义的。
如:
new A();
这个对象没有被引用,实际上是没有被引用,只不过是初始化,没有被实例化。
A a = new A();
这个是初始化对象并进行实例化为a对象,这样就可以对a进行操作了。

java 怎么手动释放数组

我申请了一个数组

byte[] tbytes = new byte[100];

需要在特定的时候手动释放他,给他从新分配空间,新空间和原来的大小是不一样的,
比如需要:
delete tbytes;
tbytes = null;
tbytes = new byte[200];

在java里该怎么实现?貌似没有delete

java当中数组是不需要手动释放的,底层有自动回收垃圾的机制,扩展如下:
前一次循环结果如果没有被引用,那么会等待被自动释放,如果被引用,则不释放。
String[] str2=new String[500];
意思是每次循环都重新定义,并且重新赋值为新创建的数组对象,而上次循环所声明的变量以及所创建的数组对象都被列入自动回收列表了。
参考技术A java没有提供直接操作内存的api。只能期待内存回收机制了。当那块内存地址没有任何引用的指向它的时候,就会被回收。。。理论上是这样。你直接tbytes = new byte[200];就可以了。 参考技术B JVM会自动回收被置为null的对象
你在不使用该数组的时候将其置为null
JVM就会自动回收了
当然,你可以再加上一句System.gc();
提醒JVM强制回收垃圾
参考技术C tbytes = null 就可以了

gc会自动收拾的本回答被提问者采纳

以上是关于怎么用new定义一个类数组,并且释放内存的主要内容,如果未能解决你的问题,请参考以下文章

c++中用new给未知大小的数组分配空间怎么弄?

怎么使用new操作符创建动态数组?

用C语言分配开辟内存问题

C++ 关于内存泄露问题。内存泄露是指用new 分配的内存没有用delete释放,如果未释放会有啥后果?

C++ 对象的动态建立 & 释放

c++中new和delete的用法