gpt4 book ai didi

c++ - 获取存储空间意味着什么?

转载 作者:行者123 更新时间:2023-12-02 13:50:27 26 4
gpt4 key购买 nike

[basic.indet] p1说:

When storage for an object with automatic or dynamic storage duration is obtained, the object has an indeterminate value, and if no initialization is performed for the object, that object retains an indeterminate value until that value is replaced.

为对象获取存储到底意味着什么?考虑这个代码片段:

int a = 0;
new (&a) int;

什么时候获取由new-expression创建的int对象的存储空间?是在定义创建的原始对象的存储时获取的,还是在通过new-表达式创建对象时获取的?

(旁注:根据 P0593 这个新对象将由于 [basic.life] p4 而具有不确定的值,但是,这没有明确指定,除非在创建第二个对象时认为存储被获取)

编辑:这似乎是未答复的缺陷报告的主题 CWG 1997

最佳答案

实际上,it's quite simple 。来自 [expr.new]/8:

A new-expression may obtain storage for the object by calling an allocation function

Placement-new 是一个分配函数。它可能只返回与给定的指针相同的指针,但此过程仍然被视为“获取对象的存储空间”。该存储是 &a 指向的存储。因此,它完全按照预期工作。 a 当前使用的存储正在被重用。因此,当前的 a 结束其生命周期,而新的 int 在同一存储中开始其生命周期。

“获取对象的存储空间”并不意味着“让存储空间出现以前不存在的状态”。正如它所说的那样:获取一 block 存储空间以便将对象放在那里。这与简单地获取一 block 存储不同。该存储 block 可能已经被其他对象使用是正交的。

关于c++ - 获取存储空间意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58356030/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com