ฉันได้รับแจ้งว่ารหัสต่อไปนี้มีพฤติกรรมที่ไม่ได้กำหนดไว้จนถึง 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
? ใช่.