关于new 、delete、及应用的使用

来源:互联网 发布:电视足球直播软件 编辑:程序博客网 时间:2024/05/06 07:32

C中使用malloc()、free()在自由空间中分配存储空间,C++中使用new 和 delete

 

new有3种形式

    int *p=new int;

    int *p=new int(10);

    int *p=new int[20];

delete有2种形式

   delete p;

   delete [] p;

 

new表达式返回指向新创建对象的指针,通过该指针来访问此对象,比如:

   

    int *p=new int;   //new表达式在自由空间中分配了一个整形对象,并返回对象的指针,可用该地址来初始化指针p

    delete p; //释放掉p指针指向的int类型对象所占用的内存空间

 

(1)  申请数组

  int *p= new int[10]; //定义长度为10的为初始化的数组

  delete [] p;               //释放空间

  string *pi=new string[10]; //申请能存放10个字符串的内存空间

(2)  动态申请空间

     动态创建对象时,只需指定其数据类型,而不必为该对象命名

   size_t n=get_size();

   int *p=new int [n];

   for(int *q=p;q!=p+n;++q)

(3)

   int *p=new int(1024); //p指向一个值为1024的int对象 

   int i(1024) 等价于 int i=1024;

 

(4) 一维数组的动态申请

#include<iostream>
using namespace std;
int main()
{
 int len;
 cin>>len;
 int *p=new int[len];//用指针p指向new动态分配的长度为len*sizeof(int)的内存空间
 for(int i=0;i<len;i++)
 {
  *(p+i)=i+1;
  cout<<*(p+i)<<endl;
 }
 delete[] p;    //释放空间
 return 0;
}

(5) 2维数组的动态申请与释放

#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
int main()
{
 int num1;//行数
 int num2;//列数
 cout<<"Please enter the number for row and column: "<<endl;
 cin >> num1 >> num2;
 //为二维数组开辟空间
 int **p;
 p= new int*[num1];
 for(int i=0; i<num1; ++i)
  p[i] = new int[num2];
 for(int j=0;j<num1;j++)
 { 
  for(int k=0;k<num2;k++)  
  {  
   p[j][k]=(j+1)*(k+1);  
   cout<<setw(6)<<p[j][k]<<':'<<setw(8)<<&p[j][k];   
  } 
  cout<<endl; 
 }
 //释放二维数组占用的空间
 for(int m=0;m<num1;m++)
  delete[] p[m];
 delete[] p;
 return 0;
}

原创粉丝点击