C++中,关于NEW关键字的使用

2020-11-22 20:37:23 字数 6661 阅读 8317

1楼:水煮的肉片

1.前者在堆栈中分配内存,后者为动态内存分配,在一般应用中是没有什么区别的,但动态内存分配会使对象的可控性增强。

2.不加new在堆栈中分配内存

3.大程序用new,小程序直接申请

4.只是把对象分配在堆栈内存中

5.new必须delete删除,不用new系统会自动**内存

2楼:匿名用户

简单地说,前者对象实例的生成和销毁由系统自动控制,后者实例的生成和销毁由程序员自己控制。

3楼:匿名用户

3. 在事先不能判断将要使用多少内存时。这主要是分配一组对象,如果只要单个对象,不需要使用。

如果事先不知道会不会使用一个对象,可以先只声明一个指针,在需要用的时候在用new分配空间。

4 不用new,也可能在好几个地方分配内存,比如堆栈,静态储存区等等。

5. new和delete必需成对使用,否则会造成所谓的内存泄漏。

使用c++中的new关键字创建对象要不要加()

4楼:匿名用户

new 一个类或者结构体的话,实际上就是调用了他的无参数构造函数。

加上括号,指名了调用类的无参数的构造函数 ;括号内加参数的话,就是调用其他带参数的类的构造函数了。

总结:不到括号的比较简洁,但是有一定局限性,无法带参数实例化一个类。

5楼:咖啡色的肌肤

要,这是调用构造函数

new 一个类或者结构体的话,实际上就是调用了他的无参数构造函数。

加上括号,指名了调用类的无参数的构造函数 ;括号内加参数的话,就是调用其他带参数的类的构造函数了。

6楼:平底锅

如果你调用的是无参数的构造函数 加不加都没关系,

7楼:高楼寻缝

取决于类的构造函数。如果构造函数为有参数,那么new 后的括号中要有相应的参数。

如果是无参的构造函数,那么有无括号都行。

8楼:云中凌

要,这是调用构造函数,你的构造函数是public:example(){}

c++中new的用法

9楼:老表有点呈

c++中new运算符用于动态分配和撤销内存的运算符。

1、开辟单变量地址空间

new int; //开辟一个存放数组的存储空间,返回一个指向该存储空间的地址.int *a = new int 即为将一个int类型的地址赋值给整型指针a. 2)int *a = new int(5) 作用同上,但是同时将整数赋值为5。

2、开辟数组空间

要访问new所开辟的结构体空间,无法直接通过变量名进行,只能通过赋值的指针进行访问。用new可以动态开辟,撤销地址空间。在编程序时,若用完一个变量,下次需要再用,可以在每次开始使用时开辟一个空间,在用完后撤销它。

10楼:手机用户

new int;//开辟一个存放整数的存储空间,返回一个指向该存储空间的地址(即指针)

new int(100);//开辟一个存放整数的空间,并指定该整数的初值为100,返回一个指向该存储空间的地址

new char[10];//开辟一个存放字符数组(包括10个元素)的空间,返回首元素的地址

new int[5][4];//开辟一个存放二维整型数组(大小为5*4)的空间,返回首元素的地址

float *p=new float (3.14159);//开辟一个存放单精度数的空间,并指定该实数的初值为//3.14159,将返回的该空间的地址赋给指针变量p

new运算符使用的一般格式为   new 类型 [初值]   用new分配数组空间时不能指定初值。如果由于内存不足等原因而无法正常分配空间,则new会返回一个空指针null,用户可以根据该指针的值判断分配空间是否成功。

delete运算符使用的一般格式为   delete [ ] 指针变量

例如要撤销上面用new开辟的存放单精度数的空间(上面第5个例子),应该用   delete p;

前面用“new char[10];”开辟的字符数组空间,如果把new返回的指针赋给了指针变量pt,则应该用以下形式的delete运算符撤销该空间:

delete pt;//在指针变量前面加一对方括号,表示是对数组空间的操作

例 开辟空间以存放一个结构体变量。

#include

#include

using namespace std;

struct student //声明结构体类型student

;int main( )

运行结果为   wang fun 10123 m

11楼:幸运夕夕

c++中new的用法有三种,具体如下:

一、new operator,也叫new表达式;new表达式比较常见,也最常用,例如:

上面这个new表达式完成了两件事情:申请内存和初始化对象。

二、operator new,也叫new操作符。这两个英文名称起的也太绝了,很容易搞混,那就记中文名称吧。new操作符类似于c语 言中的malloc,只是负责申请内存,例如:

注意: 这里多了一个operator。这是new的第二个用法,也算比较常见吧。

三、placement new,它用于在给定的内存中初始化对象,也就是说你手中已有一块闲置的内存,例如:

那么现在buffer是你所拥有闲置内存的指针buffer = new(buffer) string("abc"); //调用了placement new,在buffer所指向的内存中初始化string类型的对象,初始值是"abc",事实上,placement new也是new表达式的一种,但是比普通的new表达式多了一个参数,当然完成的操作和返回值也不同。

因此上面new的第一种用法可以分解两个 动作,分别为后面的两种用法。

注意:1、用户是无法主动调用构造函数的,所以需要借助placement new,但是用户可以主动调用析构函数,所以用完这些对象后,调用析构函数,然后用对应分配内存的方法去释放内存。

2、事实上malloc并不一定比operatornew节省多少时间,用placement new常常是为了考虑性能,所以会配合内存池一起使用。

12楼:匿名用户

new的功能是动态分配内存。

语法就是 new 类型名t(初值列表)

13楼:

new的作用是动态开辟空间,一般的形式估计你也会了。我就直接给你讲题吧

你这个函数的作用是动态建立一个(n1+1)*(n2+1)的二维数组(注:在c++中直接用new(a)这种形式是错误的)

首先明白所谓指针就是存放地址的变量,这一点最重要double**a=newdouble*[n1+1];

这句话的意思是开辟以一块连续的空间用来存储指针变量(指针的指针),它的大小是n1+1。*a是指针,那么**a就是存放指针的指针。那个new后的double*相当于一个强制转换。

因为用new时和数组的名字无关所以[n1+1]前的数组名可以省略。这个类比于newdouble[3];

for(i=0;i<=n1;i++)

这个语句就是给把指针付给指针的指针,看下边的图你就明白了;

多琢磨一下!

14楼:有界函数

推荐你看一下effictive c++,这里面有单独的一节是讲 new 的。细致的讲不了,可以自己去看看。

c++语言中,new表示什么的关键字?

15楼:花花

“new”是c++的一个关键字,同时也是操作符关于new的话题非常多,因为它确实比较复杂,也非常神秘,下面我将把我了解到的与new有关的内容做一个总结。

new的过程

当我们使用关键字new在堆上动态创建一个对象时,它实际上做了三件事:获得一块内存空间、调用构造函数、返回正确的指针当然,如果我们创建的是简单类型的变量,那么第二步会被省略假如我们定义了如下一个类a:

class a

void say()

};//调用new:

a* pa = new a(3);

那么上述动态创建一个对象的过程大致相当于以下三句话(只是大致上):

a* pa = (a*)malloc(sizeof(a));

pa->a::a(3);

return pa;

虽然从效果上看,这三句话也得到了一个有效的指向堆上的a对象的指针pa,但区别在于,当malloc失败时,它不会调用分配内存失败处理程序new_handler,而使用new的话会的因此我们还是要尽可能的使用new,除非有一些特殊的需求

new的三种形态

到目前为止,本文所提到的new都是指的“new operator”或称为“new expression”,但事实上在c++中一提到new,至少可能代表以下三种含义:new operator、operator new、placement new

c++关于指针的解释和new 关键字

16楼:匿名用户

指针就是一种变量,他也有一般变量的特性,但它又具有一些特殊,因为它存的是地址,可以通过他访问另一个变量。所以指针就是存放地址的变量,

有的情况下用指针很方便,就如链表,你不知道数据个数的情况下用链表就很好,又如再一个窗体调用另一个窗体的函数时。还有些特殊情况只能通过指针调用。

17楼:匿名用户

new 只是为对象分配一块内存

而指针是指向这个内存地址的变量

如myfun()

当退出该函数后,系统为str分配的内存就会被释放,也就是str指向的内存中东西没了

而p指向的内存不会被释放,该段内存中的东西依然存在,并可以通过指针p对该内存操作

18楼:匿名用户

关于new,这里有详细的解释:

http://blog.csdn.***/songthin/archive/2007/07/23/1703966.aspx

关于c++中的new关键字!!

19楼:匿名用户

这里其实是调用一个构造函数~ 如果构造函数里面没有参数 这俩之间没区别。

如果有参数 必须a(参数)

关于c++中new语句的使用方法~~

20楼:匿名用户

3: int *p=new int [10];

004010e8 6a 28 push 28h//内存

的大小10*4

004010ea e8 21 00 00 00 call operator new (00401110)

004010ef 83 c4 04 add esp,4

00401110 55 push ebp

00401111 8b ec mov ebp,esp

00401113 51 push ecx

00401114 6a 01 push 1//_nh_malloc参数2

00401116 8b 45 08 mov eax,dword ptr [cb]

00401119 50 push eax//_nh_malloc参数1

0040111a e8 e1 3b 00 00 call _nh_malloc (00404d00)//调用_nh_malloc申请内存

0040111f 83 c4 08 add esp,8

00401122 89 45 fc mov dword ptr [res],eax//把_nh_malloc的返回值给[res]

00401125 8b 45 fc mov eax,dword ptr [res]//返回申请内存的指针

00401128 8b e5 mov esp,ebp

0040112a 5d pop ebp

0040112b c3 ret//返回

调用过程可以看成这样:

new[4*10]->_nh_malloc(40, 1)->返回申请的指针

res这个是vc6.0反汇编后给出的变量名,其实它是一个局部变量

push ecx //这句就是申请res的内存的 相当sub esp, 4

00401122 89 45 fc mov dword ptr [res],eax//把_nh_malloc的返回值给[res]

00401125 8b 45 fc mov eax,dword ptr [res]//返回申请内存的指针

为什么会产生产生上面的2句**?

因为这个是调试模式的编译,**没有优化,所以才会产生这样的问题

等于 >

如何用iOS设备中的Safari在网页上查找关键字

1楼 邹义军 你好!通常我们在电脑上使用浏览器查找网页上的关键字是很方便的。其实在 ios 设备中的 safari 浏览器中也可以的,不管是 ipad ipod touch 还是 iphone 都可以在网页中查找关键字。 在iphone中的safari中查找关键字 1 首先打开 iphone 上的 ...