初始化指向struct语法的指针

Initialize a pointer to struct syntax

本文关键字:指针 语法 struct 初始化      更新时间:2023-10-16

在内存分配方面

struct_type * mystruct = new struct_type();

struct_type *mystruct = new struct_type[1];

?

这取决于你所说的"内存分配差异"。

首先,newnew[]是两个独立的内存分配机制,它们可以(并且将)分配具有不同内部布局的内存,例如与分配的内存块关联不同的实现相关的家庭信息。重要的是要记住,第一次分配必须与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个结构对象的数组,并将数组的起始地址返回给指针

我认为这两行代码在内存分配方面没有区别。