C++中new的用法

 我来答
皓哥侃球
高粉答主

推荐于2019-08-21 · 看球,侃球,分享球,不求专业,只求痛快!
皓哥侃球
采纳数:66 获赞数:151673

向TA提问 私信TA
展开全部

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

1、开辟单变量地址空间

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

2、开辟数组空间

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

扩展资料:

C++中使用new的注意事项:

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

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

参考资料来源:百度百科:定位放置new

jeak_yang
2012-03-12 · TA获得超过469个赞
知道小有建树答主
回答量:177
采纳率:0%
帮助的人:173万
展开全部

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

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

首先明白所谓指针就是存放地址的变量,这一点最重要

double **a=new double*[n1+1];

这句话的意思是开辟以一块连续的空间用来存储指针变量(指针的指针),它的大小是n1+1。*a是指针,那么**a就是存放指针的指针。那个new后的double* 相当于一个强制转换。因为用new时和数组的名字无关所以[n1+1]前的数组名可以省略。这个类比于new double[3];

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

 {

  a[i]=new double[n2+1];

 }

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

多琢磨一下!

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
舒心还坦然的小可爱H
推荐于2019-10-23 · TA获得超过8838个赞
知道小有建树答主
回答量:55
采纳率:0%
帮助的人:8240
展开全部

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常常是为了考虑性能,所以会配合内存池一起使用。

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
圣千秋R4
推荐于2017-09-29 · TA获得超过7.9万个赞
知道大有可为答主
回答量:3.3万
采纳率:0%
帮助的人:2554万
展开全部
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 <iostream>   
#include <string>   
using namespace std;
  struct Student //声明结构体类型Student
  {
string name;   
int num;   
char sex;
  };
int main( )   
{
Student *p; //定义指向结构体类型Student的数据的指针变量
  p=new Student; //用new运算符开辟一个存放Student型数据的空间
  p->name=″Wang Fun″; //向结构体变量的成员赋值
  p->num=10123;
  p->sex='m';
cout<<p->name<<endl<<p->num<<endl<<p->sex<<endl;//输出各成员的值
  delete p;//撤销该空间
  return 0;   
}   
运行结果为   Wang Fun 10123 m
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zsx10110
2012-03-11 · TA获得超过8872个赞
知道大有可为答主
回答量:2369
采纳率:66%
帮助的人:3090万
展开全部
new的功能是动态分配内存。
语法就是 new 类型名T(初值列表)
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式