다음 코드는 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);
auto p = alloc_int();
*p = 20;
여전히 정의되지 않은 동작입니까?
int
? 아니요std::string
. 예.