关于c++ new delete的问题

我初学 看了一些程序 基本都能看懂了 也没看到new delte 但是今天发现了 new delete 想知道我什么时候用它呢 最好举个例子 谢谢啦

new是在堆中申请内存并返回该内存首地址,delete是把内存还给进程。。。这两个关键字的用途是使用动态内存。。。。你肯定学过静态变量和自动变量,自动变量是有作用域限制的,出了作用域你就不能用了。。静态变量虽然可以通过指针在任何位置使用,但有一个缺陷就是一点声明静态变量这个变量不能删除,永久占内存,浪费空间,除非进程关闭。。。
new和delete提供了一种动态使用内存的方法,就弥补了静态变量和自动变量的缺陷。。。用new提供的内存空间可以通过指针在进程内任何位置使用(他和静态变量一样都在堆中申请内存),如果再也用不到了,或者很长时间用不到我可以把它删除用delete,从而避免多占内存。。。。
举个最简单的游戏例子,我们经常会用主角去杀小喽啰,这个小喽啰的相关数据是占内存的,在这个小喽啰没有刷新出来之前,是不占内存的,也就是不存在这个小喽啰,一旦刷新就需要用new来提供内存来记录相关数据,如果你把他杀了,这个内存数据就没有用了,就需要用delete把它站的内存释放掉,以便别处来使用这个废弃的内存。。。如果你不用这种方法,使用自动变量,根本就没法完成这个功能,限制太大,如果用静态怪越刷越多,只申请内存不释放内存,打一会就没有内存可用了,而且静态变量只能申请一次内存,那你要定义100个怪就要有100个变量名,或者你只能申请可存100个元素的数组,所占的内存在一开始就确定了,缺乏灵活性,所以才给他起名叫静态变量。。。。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-03-04
new和delete配套使用。当你需要根据程序的运行中间结果来动态分配内存大小时用new来分配,而不再需要这些内存空间时就用delete释放掉。比如你要根据输入的整数来创建一个数组时:
int n,*p;
cin >>n;
p=new int[n];
这就为p分配了n个连续的int空间。
当不再使用这些空间时用delete [n]p把申请的空间释放归还给系统。这一步必须做,不然,由于用new申请的空间不自动释放,会越积越多而造成所谓内存泄漏……
第2个回答  2013-03-04
比如你想得到一个在程序运行中可以控制大小的类似数组的东西。

比方说我现在程序要输入n,那我不能这样写:
int n;
cin >> n;
int a[n]; //这样是不行的
但是你可以这样:
int n;
cin >> n;
int *a = new int[n];
//...
delete[] a;
这样在程序过程中就可以得到一个长度可控的“数组”.

C++ 中关于new和delete使用的一些疑问
A1. new和delete一般要成对使用。new开辟内存,delete删除内存。A2.如果使用了new不delete程序会怎么样?这个要看你的程序。反正你要知道,new的内存如果不delete,该程序结束之前,这个内存不会释放掉。也就是说如果你的程序中常常new一些内存而不delete,你的程序占用的内存会不断增大。但是有一些全局...

关于c++ new delete的问题
new和delete提供了一种动态使用内存的方法,就弥补了静态变量和自动变量的缺陷。。。用new提供的内存空间可以通过指针在进程内任何位置使用(他和静态变量一样都在堆中申请内存),如果再也用不到了,或者很长时间用不到我可以把它删除用delete,从而避免多占内存。。。举个最简单的游戏例子,我们经常会...

C++new和delete运算符介绍
内存管理运算符new、new[]、delete和delete[]可以进行重载,其重载形式可以是类的成员函数或全局函数。通常情况下,内置的内存管理运算符已足够使用,只有在需要自行管理内存时才会进行重载。以成员函数形式重载new运算符:以全局函数形式重载new运算符:这两种重载形式的返回值相同,均为void *类型,并且都...

在c++中,释放new分配的内存空间时,使用delete和delete[]是不是有...
C++标准上规定的是:new出来的空间,必须由delete释放,new []出来的空间,必须由delete[] 释放。如果混用,会导致未定义行为。所谓未定义行为顾名思义,C++标准中未定义,结果可能很正常,也可能不对头,甚至可能让你的程序崩溃。实际上部分编译器中,一般情况下你一定程度的混用也是ok的(但也仅限于...

关于C++ new string类 最后delete的问题
只要是C++,无论什么变量类型,只要有new一定要用delete,不然会内存泄露,就这么简单,如果没有用new,编译器会自动帮你析构的

c++中不用new也能用delete吗? 什么情况下要用new,什么情况下不要用...
首先,new和delete要成对使用,否则会造成内存泄漏。什么时候使用new,使不使用完全取决于编程人员。new的作用是在堆内存中申请一块内存,并且申请内存的大小可以在程序运行时动态的决定。这个就是堆内存的最大价值之一。因为,于局部变量的栈内存,全局变量和static变量的静态内存都必须在编译阶段确定,在...

c++中new和delete的用法
在C++编程中,使用new分配的数组可用delete释放。这里释放的是动态分配的数组空间,而不是静态分配的数组空间,详细步骤:1、例如,我们动态创建了一个一维int数组arr,现在需要将它释放。2、这时只需要使用delete[]数组名即可。3、注意,要释放数组所占的内存,[]不能少。否则,用delete则不能完全释放...

C++,基础问题,谁能给我讲讲,new和delete的用法。不要从乱七八糟的网站...
delete直接对于一个new出来的对象的指针进行操作。上面提到的三个都执行过了,而且这些指针没有被delete过。可以这样delete掉 delete p_A;delete p;delete [] p_int;注意第三个,new XXX[n]出来的对象指针,需要用delete []去释放。delete和delete[]不一样,不能混用,否则出错。new和delete的使用...

请详细解释一下c++中的new和delete
每个new运算符创建的内存单元,只能用delete释放一次。而且一个new对应一个delete是最好的。new和delete例子很不经意。实际用时发现问题再解决吧。二、静态指针 动态指针 好像没有专门的定义“静态指针”和“动态指针”吧!C++中各种数据类型都可以指定指针变量。指针除了可以指向一般变量外,还可以指向其他...

C++关于char*型数组的new与delete
有一个new操作,就需要一个delete操作 有一个new []操作,就需要一个delete[]操作,否则内存泄漏 所以应该是 {char* s = new char[100];delete[] s;} s本身存在于栈,指向的空间位于堆 char* s = "hello";\/\/“hello”是常量,会被放入全局变量区,不会因为}结束而消失。s是栈区会消失。...

相似回答