C++ new 动态内存 对象初始化

User a[2]=User(23,24);这种写法对数组的每一个对象调用有参数的构造函数,是功能实现最完备的形式。

User a(23,24);这种写法可以调用有参数的构造函数。

User a[2](23,24);User a(23,24)[2];均错误,无法编译。

int a=new int; User *a= new User;这种写法不初始化,仅分配内存,里面是乱码。

int a=new int(); User *a= new User();这种写法调用无参数的构造函数,也就是默认构造函数。

User *a=new User[2];User *a=new User[2]();两种等价,只能调用默认构造函数。但是可以对数组操作。

User *a= new User(23,24);任意构造函数,但是只能对单个对象。

User *a=new User[2](23,24);User *a=new User(23,24)[2];均错误,无法编译。

 

总结一下,最完备的写法是

User a[2]=User(23,24);可以使用任意构造函数初始化数组;但是它的缺点是,不是动态分配内存。

动态分配内存的话,也就是带new的式子,没有办法用有参数的构造函数初始化对象数组。要么得到数组,也就是

User *a=new User[2];User *a=new User[2]();要么用有参数的构造函数得到单个对象User *a= new User();无法兼得。好处是可以动态分配内存。

妥协一下的话,我们可以把要调用的构造函数去参,设为默认函数。如果不想妥协或者为了避免改代码带来的麻烦,

并且想要动态分配内存,并且用含参数的构造函数初始化数组,那么只能借助循环语句来实现了。

你可能感兴趣的:(基础知识)