2
在C ++ 20之前将malloc用于int未定义行为
有人告诉我,以下代码在C ++ 20之前具有未定义的行为: int *p = (int*)malloc(sizeof(int)); *p = 10; 真的吗? 该论点是int对象的生存期在分配值之前没有开始(P0593R6)。若要解决此问题,new应使用放置: int *p = (int*)malloc(sizeof(int)); new (p) int; *p = 10; 我们真的必须调用一个琐碎的默认构造函数来启动对象的生存期吗? 同时,该代码在纯C语言中没有未定义的行为。但是,如果我int在C代码中分配一个并在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); …