之间的内存分配是否有任何差异
struct_type * mystruct = new struct_type();
和
struct_type *mystruct = new struct_type[1];
?
答案 0 :(得分:4)
这取决于你的意思"内存分配的差异"。
首先,new
和new[]
是两个独立的内存分配机制,它可以(并且将)分配具有不同内部布局的内存,例如:具有与分配的存储块相关联的不同依赖于实现的家庭信息。重要的是要记住,第一个分配必须与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)
我认为这两行代码之间的内存分配没有区别。