C++中new的用法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++中new的用法相关的知识,希望对你有一定的参考价值。

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

参考技术A

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];

 

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

多琢磨一下!

参考技术B

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

参考技术C 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本回答被提问者采纳
参考技术D new的功能是动态分配内存。
语法就是 new 类型名T(初值列表)

以上是关于C++中new的用法的主要内容,如果未能解决你的问题,请参考以下文章

C++中new的用法

C++ 动态内存 new/delete用法

C++中new的基本用法!!!

C++中new和deletede 用法

C++中的new用法总结

C++中三种new的用法