C++ 是C++;集装箱例外安全吗?
我使用隐式构造函数和一个C++ 是C++;集装箱例外安全吗?,c++,containers,C++,Containers,我使用隐式构造函数和一个load()成员来输入属性,但也可以抛出异常 我的问题是:如果属性是日常的C++容器,如果在加载()/中发生异常,我会得到内存泄漏吗? 谢谢你的阅读 编辑:帮助澄清我的问题的示例代码 class One { public: std::vector<int> stuff; void load() { stuff.resize(13); stuff[0] = 43; std::bad_alloc
load()
成员来输入属性,但也可以抛出异常
我的问题是:如果属性是日常的C++容器,如果在<代码>加载()/<代码>中发生异常,我会得到内存泄漏吗?
谢谢你的阅读
编辑:帮助澄清我的问题的示例代码
class One
{
public:
std::vector<int> stuff;
void load() {
stuff.resize(13);
stuff[0] = 43;
std::bad_alloc ba;
throw ba; // will this cause memory leaks? (as far as this class is concerned)
}
}
第一类
{
公众:
std::载体材料;
空荷载(){
调整大小(13);
stuff[0]=43;
std::bad_alloc ba;
throw ba;//这会导致内存泄漏吗?(就此类而言)
}
}
我知道这是一个愚蠢的问题,但我不得不问它。是的,容器是非常安全的。只要你不做像在堆上分配它们这样的把戏(没有异常安全的智能指针)或诸如此类的把戏,你就没事了。是的,容器是异常安全的。只要你不做在堆上分配它们之类的恶作剧(安全智能指针无一例外),你就没事了。因为你的问题没有说明太多,我的看法如下 如果使用
new/new[]
(在load()
中)分配内存,则在引发异常时,必须使用delete/delete[]
取消分配内存
如果您是作为一个自动变量进行分配,那么它们是异常安全的。因为您的问题没有说明太多,下面是我的看法 如果使用
new/new[]
(在load()
中)分配内存,则在引发异常时,必须使用delete/delete[]
取消分配内存
如果您是作为自动变量进行分配,则它们是异常安全的。容器本身是异常安全的。
但它还取决于放置在contain中的类型以及是否正确写入 i、 例:异常不应逃逸析构函数 本标准规定了以下容器和例外情况的保证: 23.2.1一般容器要求[容器.要求.一般] 第10段: 除非另有规定(见23.2.4.1、23.2.5.1、23.3.3.4和23.3.6.5),本条中定义的所有集装箱类型均满足以下附加要求:
-如果insert()函数在插入单个元素时引发异常,则该函数无效。
-如果push_back()或push_front()函数引发异常,则该函数无效。
-没有erase()、clear()、pop_back()或pop_front()函数会引发异常。
-返回的迭代器的复制构造函数或赋值运算符不会引发异常。
-没有swap()函数引发异常
容器本身是异常安全的。
但它还取决于放置在contain中的类型以及是否正确写入 i、 例:异常不应逃逸析构函数 本标准规定了以下容器和例外情况的保证: 23.2.1一般容器要求[容器.要求.一般] 第10段: 除非另有规定(见23.2.4.1、23.2.5.1、23.3.3.4和23.3.6.5),本条中定义的所有集装箱类型均满足以下附加要求:
-如果insert()函数在插入单个元素时引发异常,则该函数无效。
-如果push_back()或push_front()函数引发异常,则该函数无效。
-没有erase()、clear()、pop_back()或pop_front()函数会引发异常。
-返回的迭代器的复制构造函数或赋值运算符不会引发异常。
-没有swap()函数引发异常
什么是加载?没有标准的C++容器有这个成员。我想答案是:是的,标准容器是异常安全的。但是你能给你的问题添加一些有代表性的代码吗,这样我们就可以确切地知道你在说什么了?
container==standardcontainer
?@Billy:load
自定义类的自定义成员@奥利:这是一个普通的问题,我没有任何代码可以分享@iammilind:是。@catfish:不清楚您是否有一个容器作为类的成员变量,或者该容器是否用于存储类的实例,以及load()
member函数如何适合此函数。一些伪代码有助于澄清这一点。什么是load
?没有标准的C++容器有这个成员。我想答案是:是的,标准容器是异常安全的。但是你能给你的问题添加一些有代表性的代码吗,这样我们就可以确切地知道你在说什么了?container==standardcontainer
?@Billy:load
自定义类的自定义成员@奥利:这是一个普通的问题,我没有任何代码可以分享@iammilind:是。@catfish:不清楚您是否有一个容器作为类的成员变量,或者该容器是否用于存储类的实例,以及load()
member函数如何适合此函数。一些伪代码将有助于澄清这一点。