初始化指向struct语法的指针

时间:2014-05-15 07:45:37

标签: c++ pointers memory-management struct

之间的内存分配是否有任何差异
struct_type * mystruct = new struct_type();

struct_type *mystruct = new struct_type[1];

4 个答案:

答案 0 :(得分:4)

这取决于你的意思"内存分配的差异"。

首先,newnew[]是两个独立的内存分配机制,它可以(并且将)分配具有不同内部布局的内存,例如:具有与分配的存储块相关联的不同依赖于实现的家庭信息。重要的是要记住,第一个分配必须与delete配对,第二个配置必须与delete []配对。此外,由于这个原因,在典型的实现中,第二次分配可能比第一次分配消耗更多的内存。

其次,您在第一个分配中使用的初始化语法()会触发已分配对象的值初始化。同时,在您的第二次分配中,您根本没有提供初始化程序。根据{{​​1}}类的具体情况,这可能会导致初始化的显着差异。例如,如果struct_type定义为struct_type,则第一次分配保证将struct struct_type { int x; }设置为零,而第二次分配将在mystruct->x中留下垃圾值。你必须mystruct->x来消除这种(可能是非预期的)差异。

答案 1 :(得分:1)

他们将分配相同数量的可见/可用内存,即保存一个对象所需的内存。但语义不同,前者是指向单个对象的指针,而后者是包含一个对象数组。在取消分配时,您应该使用

delete mystruct;

在第一种情况下

delete []mystruct; 

在第二种情况下。

另一个区别是编译器必须保存一些关于后一种情况的簿记信息,例如它必须知道数组中的项目数,以便可以正确删除它。当然,您的structure必须有一个默认构造函数才能用于后一种情况。

答案 2 :(得分:0)

第一行将创建一个结构对象并将其地址返回给指针。 第二行将创建一个包含1个结构对象的数组,并将数组的起始地址返回给指针

答案 3 :(得分:0)

我认为这两行代码之间的内存分配没有区别。