布局new操作符 (例子)

#include <iostream>
#include <new>   //布局new操作符原型
const int buf=512;
const int n=5;
char buffer[buf];
//////////////////main( )///////////////////////////
int main(void)
{
 using namespace std;
 double *pd1,*pd2;
 
 pd1=new double[n];
 pd2=new (buffer) double [n];
 for (int i=0;i<n;i++)
  pd1[i]=pd2[i]=1000+20.0*i;
 cout<<"heap "<<pd1<<" static "<<(void*)buffer<<" "<<pd2<<endl;
 for (i=0;i<n;i++)
 {
  cout<<pd1[i]<<" at "<<&pd1[i]<<";";
  cout<<pd2[i]<<" at "<<&pd2[i]<<endl;
 }
   
 double *pd3,*pd4;
 pd3=new double[n];
 pd4=new (buffer) double [n];
 for (i=0;i<n;i++)
  pd3[i]=pd4[i]=1000+20.0*i;
 cout<<"heap "<<pd3<<" static "<<(void*)buffer<<" "<<pd4<<endl;
 for (i=0;i<n;i++)
 {
  cout<<pd3[i]<<" at "<<&pd3[i]<<";";
  cout<<pd4[i]<<" at "<<&pd4[i]<<endl;
 }
   
 delete [] pd1;

 pd1=new double[n];
 pd2=new (buffer+sizeof(buffer)) double [n];
 for (i=0;i<n;i++)
  pd1[i]=pd2[i]=1000+20.0*i;
 cout<<"heap "<<pd1<<" static "<<(void*)buffer<<" "<<pd2<<endl;
 for (i=0;i<n;i++)
 {
  cout<<pd1[i]<<" at "<<&pd1[i]<<";";
  cout<<pd2[i]<<" at "<<&pd2[i]<<endl;
 }

 delete [] pd3; //pd2与pd4不能被delete 因为调用的是buffer[]的静态内存
 delete [] pd1;
 cout<<sizeof(buffer)<<endl;

   
 return 0;
}

posted @ 2007-02-11 05:23  Edward Xie  阅读(325)  评论(0)    收藏  举报