获取存储是什么意思?

克里斯汀S

[basic.indet] p1说:

当获得具有自动或动态存储持续时间的对象的存储时,该对象具有不确定的值,并且如果未对该对象执行任何初始化,则该对象将保留不确定的值,直到替换该值为止。

对于对象获取存储,这到底意味着什么?考虑以下代码片段:

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

何时获取intnew-expression创建对象的存储空间是在获取通过定义创建的原始对象的存储时,还是在new-expression创建对象的存储时获取了它

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

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

尼科尔·波拉斯(Nicol Bolas)

实际上,这很简单来自[expr.new] / 8:

new表达式可以通过调用分配函数来获取对象的存储

新安置是一种分配功能。它可能只返回与给定的指针相同的指针,但是此过程仍被认为是“获取对象的存储空间”。该存储是指向的存储&a因此,它完全按预期工作。当前正在使用的存储a正在重用。因此,电流将a终止其生命周期,而新电流int在同一存储中开始其生命周期。

“为对象获取存储空间”并不表示“使存储空间看起来不存在”。它的意思恰恰是它所说的:为了在其中放置对象而获得一块存储空间。这与简单地获得存储空间不同。该存储块可能已被某个其他对象使用,这是正交的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章