分享一些C++创建类对象的一些细节
首先创建一个类
class A
{
int num;
public: A(int num =0):num(num){
cout<<"A num="<<num<<endl;}
};
1、构造—栈对象
A a();//仅仅声明了函数,不生成对象
A b;//无参 生成栈对象
A c(2);//有参 生成栈对象 num=2
A d[10];//无参 构造10个栈对象
A e[10](2);//有参 生成10个栈对象 num均等于2
//A e(2)[3];// 编译时候报错:expected ‘,’ or ‘;’ before ‘[’ token
2、构造—堆对象
A *c = new A();//带括号,无参 申请堆对象
A *d = new A;//不带括号,无参 申请堆对象,效果同上
A *e = new A(4);//带参 申请1块A类大小的堆内存,生成1个堆对象 num=4
A *f = new A[10];//无参 申请了10块堆对象大小的内存 生成10个堆对象
A *j = new A[5]{
1,2,3};//带参 申请5块堆对象大小内存 生成5个堆对象 num分别为为1,2,3,0,0 同数组初始化
//和申请栈空间不同,可能因为指针(Pointer)是指向一个连续区域的堆空间,对()仅仅是对一个参数的直接初始化,而new A[] //应该是在对整体的初始化,所以在G++编译器认为 仅仅一个A的数字无法满足对所有数组的个数的分配。
//但是{} 的分别初始化却是对指针(Pointer)所指向的数组中的每一个元素进行初始化
//A *j = new A(4)[2];//编译时候报错:expected ‘,’ or ‘;’ before ‘[’ token
//A *j = new A[2](4);//编译时候报错:parenthesized initializer in array new [-fpermissive]
如果感觉不错的话,给个关注和赞吧!