This question询问malloc
分配的对象的动态类型是什么,并根据最佳答案:
malloc
的返回值是未初始化存储的块。在该存储中没有构造任何对象。因此它没有动态类型。
这带来了另一个问题:在malloc
返回的存储获取类型时,在什么时候才有意义。例如:
void *p = malloc(sizeof(int));
int *pi = (int*)p;
我们可以说上面的pi
指向动态类型int
的对象,尽管它是未初始化的吗?
答案 0 :(得分:9)
根据标准的现状是那里没有对象。
对象由定义([basic.def])创建,由a创建 new-expression ([expr.new])或由实现 ([class.temporary])在需要时。
另见P0137中的讨论,这将使上述引言成为 object 的定义:
起草说明:这保持了
malloc
单独存在的现状 不足以创建一个对象。
(int *)p
不是这些。
答案 1 :(得分:3)
答案是:在malloc()分配的存储中创建对象时。
注意:malloc()在C标准中定义,并在C ++标准中引用。与C ++标准的交互是为了兼容性而不是作为主要来源。
malloc()返回的是指向唯一存储区域(或NULL)的指针。它不分配或返回对象。可以通过各种方式在该存储中创建对象,并且对象具有类型而不是存储。
问题中给出的示例代码会创建一个类型化指针,但对存储没有影响。