对于缺乏默认构造函数的类,如:
class Person{
public:
Person(int temp )
{
this->b = temp;
}
public:
int b;
};
int main(){
Person* _p1 = new Person[10];//编译器会提示 “Person”: 没有合适的默认构造函数可用
delete[]p1;
return 0;
}
此时只能初始化一个Person对象并初始化其构造函数:
Person* _p1 = new Person(10);
如果Person类有默认构造函数,则可创建动态数组:
public:
Person(int temp = 10 )
{
this->b = temp;
}
public:
int b;
};
int main(){
Person* _p1 = new Person[10];//编译通过,创建动态数组,10个元素均进行默认初始化
delete[]p1;
return 0;
}
对于没有默认构造函数的类,可采用allocator类模板进行初始化:
class Person{
public:
Person(int temp )
{
this->b = temp;
}
public:
int b;
};
int main(){
allocator<Person> alloc; //1.
Person *a = alloc.allocate(2); //2.
alloc.construct(a, 1);
alloc.construct(a+1, 2);
cout << a[0].b << endl;
cout << a[1].b << endl;
alloc.destroy(a);
alloc.destroy(a+1);
return 0;
}