定位new表达式
placement-new
new(place_addr)type(initialize-list)
#include <iostream>
using namespace std;
class Time{
public:
Time(int day = 10) :_day(day){
cout << _day << endl;
}
~Time(){
}
void Print(){
cout << "this is :" << _day << endl;
}
private:
int _day;
};
int main(){
char* buff = new char[sizeof(Time)* 3];
for (int i = 0; i < 3; ++i){
Time* b1 = new(buff)Time(i); // 这里的new定位表达式是重新分配空间,同时可以调用构造函数而定的
b1->Print();
buff = buff + sizeof(Time);
}
return 0;
}
在cpp中,new主要有3种用法:
1、实例化一个对象;
2、实例化一个数组;
3、定位new表达式。
1、实例化一个对象
Student *str = new Student;一个对象大小的空间
Student *str = new Student[10];//10个对象大小的空间
2、实例化一个数组
char* buff = new char[1024];// 1024个字节大小的空间
3、定位new表达式
Time* b1 = new(buff_prev)Time(6);//从地址buff_prev中初始化一个Time类型的*b1对象,传入的初始化函数的值为6