初始化指向struct语法的指针
Initialize a pointer to struct syntax
在内存分配方面
struct_type * mystruct = new struct_type();
和
struct_type *mystruct = new struct_type[1];
?
这取决于你所说的"内存分配差异"。
首先,new
和new[]
是两个独立的内存分配机制,它们可以(并且将)分配具有不同内部布局的内存,例如与分配的内存块关联不同的实现相关的家庭信息。重要的是要记住,第一次分配必须与delete
配对,第二次分配必须与delete []
配对。同样,由于这个原因,在典型的实现中,第二次分配可能比第一次分配消耗更多的内存。
其次,您在第一次分配中使用的初始化语法()
触发被分配对象的值初始化。同时,在第二次分配中,您根本没有提供初始化式。根据struct_type
类的具体情况,这可能导致初始化方面的显著差异。例如,如果将struct_type
定义为struct struct_type { int x; }
,则保证第一次分配将mystruct->x
设置为零,而第二次分配将在mystruct->x
中留下一个垃圾值。您必须执行new struct_type[1]()
来消除这个(可能是无意的)差异。
它们将分配相同数量的可见/可用内存,即保存一个对象所需的内存。但是语义是不同的,前者是指向单个对象的指针,而后者是包含一个对象的数组。在取消分配时,应该使用
delete mystruct;
delete []mystruct;
另一个区别是编译器必须保存一些关于后一种情况的记录信息,例如,它必须知道数组中的项数,以便可以正确地删除它。当然,你的structure
必须有一个默认的构造函数在后面的情况下使用。
第一行将创建一个结构对象并将其地址返回给指针。第二行将创建一个包含1个结构对象的数组,并将数组的起始地址返回给指针
我认为这两行代码在内存分配方面没有区别。