布局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;
}


浙公网安备 33010602011771号