Ser*_*uin 5 c++ bad-alloc c++11
如果没有(因为标题中定义了这个错误),new程序中的表达式如何抛出错误是怎么回事?bad_alloc#include <new><new>
从3.7.4开始.N3337:
该库提供全局分配和释放功能的默认定义.一些全局分配和释放功能是可替换的(18.6.1).C++程序最多只能提供一个可替换分配或释放功能的定义.任何此类函数定义都将替换库中提供的默认版本(17.6.4.6).以下分配和释放函数(18.6)在程序的每个转换单元中在全局范围中隐式声明.
Run Code Online (Sandbox Code Playgroud)void* operator new(std::size_t); void* operator new[](std::size_t); void operator delete(void*); void operator delete[](void*);这些隐含的声明只介绍了函数名
operator new,operator new[],operator delete,和operator delete[].[ 注:隐式声明不引入名称std,std::size_t或该库使用来声明这些名称的任何其他名称.因此,在不包括头部的情况下引用这些函数之一的新表达式,删除表达式或函数调用<new>是格式良好的.但是,除非通过包含适当的标题声明了名称,否则引用std或std::size_t形成不良.-end note ]也可以为任何类声明和定义分配和/或释放函数
这仍然不清楚.隐式声明使用std::size_t但不引入它们(同样必须是这样bad_alloc)?并且std::size_t在new表达式可以使用之前不需要引入?可以理解这是怎么回事,或者我必须从表面上看它?
您的引述说这些全局函数存在并且按照描述隐式声明。因此,当您调用 时new,将调用标准库中的全局函数。全局函数的实现new是抛出 的一个,并且该实现在编译时std::bad_alloc可以访问,因此知道如何抛出。您的代码不需要知道 a是什么,除非您试图捕获它。但除了捕获它之外,这就像您从其他库中调用任何其他函数一样,这些函数可能会抛出一些任意异常。除非您试图捕获该异常,否则您不需要了解该异常的详细信息,但这并不能阻止被调用者抛出该异常。<new>std::bad_allocstd::bad_alloc
| 归档时间: |
|
| 查看次数: |
430 次 |
| 最近记录: |