当bad_alloc没有抛出时,“new”没有抛出保证意味着什么
what does it mean for `new` to be no-throw guaranteed when bad_alloc is not thrown
来自new
:的文档
第一个版本(1)在分配失败时抛出bad_alloc存储否则,它不会抛出任何异常(没有抛出保证)。
对我来说,这应该意味着这个代码
#include <new>
struct A{
A(){
throw 0;
}
};
int main(){
try{
A* a = new A;
}
catch(std::bad_alloc&){}
}
非常好。但是,当使用gcc编译它时(请参见此处),程序在抛出int
后终止。
这是operator new
的文档,与new
表达式不同。new
表达式调用operator new
以获取内存,然后调用该内存上请求的构造函数。operator new
不会抛出除std::bad_alloc
之外的任何其他内容,但稍后对构造函数的调用可以抛出用户代码想要的任何内容。
比较new
和operator new
的表达。
表达式new A
通常做两件事:
- 致电
operator new
获取一些存储空间 - 调用
A
的构造函数以在该存储中创建一个A
对象
粘贴的引号仅描述函数::operator new(std::size_t)
的行为。这里,步骤2在operator new
已经成功并退出之后抛出int
。
(在本例中,C++确实确保在到达任何catch
处理程序之前将分配的内存传递给operator delete
。)
关键字new
不是抛出保护,而不是您正在分配的类(A
)。您已经将A
的构造函数明确定义为抛出异常;当分配了A
时,A
抛出异常,而不是new
。
相关文章:
- 这行代码在C++类中意味着什么
- 这对"With a stackless coroutine, only the top-level routine may be suspended."意味着什么
- @CPPFLAGS@在 Makefile.in 中意味着什么?
- 生成文件"relink"意味着什么?
- 从二进制流中读取时,将双精度变量的地址转换为 char* 意味着什么?
- 在这种情况下,"typename..."意味着什么?
- "in-situ without memory allocation" 字符串的愚蠢实现意味着什么?
- 使用typedef有什么用,它意味着什么
- GCC 的 -Wpsabi 选项究竟有什么作用?压制它意味着什么?
- 这在C++ "It does not own the underlying data, and so is cheap to copy or assign"中意味着什么
- 由于某种原因,我的代码中出现了 [json.exception.type_error.302]。我知道错误意味着什么,但我不知道哪里有故障
- 调用堆栈显示 SIGBUS,这意味着什么
- C++标准在[basic.scope.hiding]中"same scope"到底意味着什么?
- 评估对象的创建意味着什么?
- 当我们在 C++ 中说"initialize the object"时,它实际上意味着什么?
- C++这种结构"InterceptionKeyStroke &kstroke = * (InterceptionKeyStroke *) &stroke"意味着什么?
- 该语法在C 中意味着什么
- 链接标志对静态库意味着什么
- 由mpglib输出的"hip: Can't rewind stream by 74 bits"到底意味着什么?
- 这在 C# 中意味着什么以及如何使用它