【发布时间】:2020-06-13 10:13:06
【问题描述】:
我之前曾在异常已关闭且内存分配失败意味着我们终止程序的环境中工作。现在处理异常我想知道以下内容的精确语义:
class Foo {
std::unique_ptr<Bar> x;
std::unique_ptr<Bar> y;
public:
Foo(): x{new Bar}, y{new Bar} {}
};
我的问题是在分配y 时抛出new Bar 会发生什么?我假设调用了x 的析构函数,以便清理第一个分配。语言如何保证这一点?任何人都知道解释精确语义的标准引用吗?
【问题讨论】:
-
y不是“分配的”本身;它的内存空间是Foo的一部分。它指向的东西是由你的new Bar表达式分配的。请注意术语。我认为您的意思是“初始化”。
标签: c++ exception constructor language-lawyer object-lifetime