有人告诉我下面的代码在 c + + 20之前是有未定义行为的:
int *p = (int*)malloc(sizeof(int));
*p = 10;
是真的吗?
参数是,在为 int
对象赋值(P0593R6)之前,不会启动 int
对象的生命周期。为了解决这个问题,应该使用位置 new
:
int *p = (int*)malloc(sizeof(int));
new (p) int;
*p = 10;
我们真的需要调用一个微不足道的缺省构造函数来启动对象的生命周期吗?
与此同时,代码在纯 C 中没有未定义行为,但是,如果我在 C 代码中分配一个 int
并在 C + + 代码中使用它会怎么样呢?
// C source code:
int *alloc_int(void)
{
int *p = (int*)malloc(sizeof(int));
*p = 10;
return p;
}
// C++ source code:
extern "C" int *alloc_int(void);
auto p = alloc_int();
*p = 20;
还有未定义行为吗?