malloc分配的内存在什么时候获得类型?

时间:2016-03-15 23:42:11

标签: c++ memory-management malloc language-lawyer

This question询问malloc分配的对象的动态类型是什么,并根据最佳答案:

  

malloc的返回值是未初始化存储的块。在该存储中没有构造任何对象。因此它没有动态类型。

这带来了另一个问题:在malloc返回的存储获取类型时,在什么时候才有意义。例如:

void *p = malloc(sizeof(int));
int *pi = (int*)p;

我们可以说上面的pi指向动态类型int的对象,尽管它是未初始化的吗?

2 个答案:

答案 0 :(得分:9)

根据标准的现状是那里没有对象。

[intro.object]/1

  

对象由定义([basic.def])创建,由a创建    new-expression ([expr.new])或由实现   ([class.temporary])在需要时。

另见P0137中的讨论,这将使上述引言成为 object 的定义:

  

起草说明:这保持了malloc单独存在的现状   不足以创建一个对象。

(int *)p不是这些。

答案 1 :(得分:3)

答案是:在malloc()分配的存储中创建对象时。

注意:malloc()在C标准中定义,并在C ++标准中引用。与C ++标准的交互是为了兼容性而不是作为主要来源。

malloc()返回的是指向唯一存储区域(或NULL)的指针。它不分配或返回对象。可以通过各种方式在该存储中创建对象,并且对象具有类型而不是存储。

问题中给出的示例代码会创建一个类型化指针,但对存储没有影响。