Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
std::malloc可以创建对象吗?是否总是需要新的安置? 这个代码在C++中有未定义的行为吗?< /P> #include <cstdlib> int main() { int *ip = static_cast<int *>(std::malloc(sizeof *ip)); *ip = 42; //is this accessing an object that has not started its lifetime? free(ip); } #包括 int main(){ int*ip=static_cast(std::malloc(sizeof*ip)); *ip=42;//这是在访问尚未开始其生存期的对象吗? 免费(ip); }_C++_Language Lawyer - Fatal编程技术网

std::malloc可以创建对象吗?是否总是需要新的安置? 这个代码在C++中有未定义的行为吗?< /P> #include <cstdlib> int main() { int *ip = static_cast<int *>(std::malloc(sizeof *ip)); *ip = 42; //is this accessing an object that has not started its lifetime? free(ip); } #包括 int main(){ int*ip=static_cast(std::malloc(sizeof*ip)); *ip=42;//这是在访问尚未开始其生存期的对象吗? 免费(ip); }

std::malloc可以创建对象吗?是否总是需要新的安置? 这个代码在C++中有未定义的行为吗?< /P> #include <cstdlib> int main() { int *ip = static_cast<int *>(std::malloc(sizeof *ip)); *ip = 42; //is this accessing an object that has not started its lifetime? free(ip); } #包括 int main(){ int*ip=static_cast(std::malloc(sizeof*ip)); *ip=42;//这是在访问尚未开始其生存期的对象吗? 免费(ip); },c++,language-lawyer,C++,Language Lawyer,注: . 在Cstd::malloc中创建有效的ints,那么它应该是有效的吗 对象或引用的生存期是 对象或引用。一个物体被认为是非真空的 初始化,如果它是类或聚合类型,并且 它的子对象由构造函数(而不是普通构造函数)初始化 默认构造函数。[ 注意:通过简单的复制/移动进行初始化 构造函数是非空初始化- 尾注 ] 一生 类型为T的对象的定义在以下情况下开始: (1.1) 对于T型,获得了具有适当对齐和尺寸的存储,并且 (1.2) 如果对象具有非空初始化,则其初始化已完成 除非该对象是联合成员或其

注:
. 在C
std::malloc
中创建有效的
int
s,那么它应该是有效的吗

对象或引用的生存期是 对象或引用。一个物体被认为是非真空的 初始化,如果它是类或聚合类型,并且 它的子对象由构造函数(而不是普通构造函数)初始化 默认构造函数。[ 注意:通过简单的复制/移动进行初始化 构造函数是非空初始化- 尾注 ] 一生 类型为T的对象的定义在以下情况下开始:

(1.1) 对于T型,获得了具有适当对齐和尺寸的存储,并且
(1.2) 如果对象具有非空初始化,则其初始化已完成

除非该对象是联合成员或其子对象


我很确定这句话回答了我的问题,但我不太明白它是说是还是不是。

您的对象的类型为
int
,不需要非常简单的初始化,因此只要调用
std::malloc
,就可以满足这两个要点


如果对象需要一个非平凡的构造函数调用,那么
new
是满足(1.2)的方法,如果您想使用除
operator new()之外的分配器< />代码>然后放置new是正确的方法。引用与否相关,这已经被讨论了100万次。挂起,我会找一个复制品。也许复制不要使用<代码> MalcC <代码> >代码>免费< /代码>在C++中。使用<代码>新< /COD> >代码>删除<代码>。或者更好,不要使用RAII,自动对象,CONT。AINER和智能指针,避免手动内存管理。我认为标准委员会将“非平凡初始化”改为“非真空初始化”是有充分理由的,但我确实不喜欢这个新术语。我认为“真空”这个链接可能来自一些基于计算机的语言翻译或其他东西,但我看到它是在C++17中。