mimik написав:Але чому так не можна робити в С++?
Бо, згідно стандарту С++ такий код викликає невизначену поведінку (undefined behavior, UB).
http://eel.is/c++draft/intro.object#1 написав:An object is created by a definition, by a new-expression, when implicitly changing the active member of a union, or when a temporary object is created.
mimik написав:так можна писати лише в С, але не в С++
В С++ так не можна робити, через основну відмінність між С та С++, яка полягає у тому, що в С++ є таке поняття як продовжуваність життя об'єктів (та взагалі життя об'єкту, the lifetime of an object). Життя об'єкту в С++ розпочинається, коли конструктор завершив свою роботу, та закінчується коли розпочався виклик деструктора. Власне, а malloc не викликає ніяких конструкторів, відповідно об'єкт ніколи не розпочинав своє існування, то що ви в нього хочете?
mimik написав:І що це означає?
Це означає, що до С++20 ви так не могли робити, а з С++20 можете, і можете забути половину з того, що я писав та використовувати malloc, і ніяких UB не буде