从std :: unique_ptr <>()的文档中,我不清楚初始化指针时可能发生的情况。 当分配一个std::shared_ptr<>() ,它分配一个内存缓冲区来处理引用计数器。 所以我可能会得到一个std::bad_alloc异常。 初始化唯一指针时 ...
从std :: unique_ptr <>()的文档中,我不清楚初始化指针时可能发生的情况。 当分配一个std::shared_ptr<>() ,它分配一个内存缓冲区来处理引用计数器。 所以我可能会得到一个std::bad_alloc异常。 初始化唯一指针时 ...
在下面的代码中,作者指出, new operator调用可能会导致异常,因此该实现不是异常安全的,因为第一行中的对象状态已更改。 在阅读时,我想知道C库函数是否会在C ++中引发异常? 我知道C中没有例外,但是由于我们使用的是C ++编译器,因此可能会有例外。 因此,我们可以将c ...
资源获取初始化(RAII)习惯用法和try-finally语句构成了编写异常安全编程的传统方法的支柱。 我的问题是:C#上是否有类似Scope Guard声明的内容 ? ...
编写类(使用复制和交换习语)时的一般准则是提供非抛出交换成员函数。 ( Effective C ++,第3版,第25项和其他资源) 但是,如果我不能提供nothrow保证,因为我的类使用的第三方类成员不提供交换操作,该怎么办? CString swap无法进行无抛出,因此交换可能 ...
有没有办法获得有关 Java 标准类的异常安全方面的一些详细信息? 主要使用 C++ 和 C#,我对 Java 异常规范感到困惑,所以我需要了解处理异常的正确方法。 更具体地说,让我们考虑ServerSocket 。 一旦构建了 object,它就会开始侦听传入连接。 然后,您应该使用accept( ...
我讨论了异常安全保证人,并设计了一个我认为可以提供有力保证的示例: 只是一个简单的(C ++ 0x)-示例如何使用它: 假设LT不会改变要素,但是可能会抛出。 假设代码提供了正确的答案吗 强异常安全保证 对LT是中性的吗? ...
假设您有一段代码,例如: 我在这里没有指任何特定的语言,但我想 Java、C# 和 C++ 将是很好的例子(假设你使用的是__try / __finally ++) 这是异常安全的吗? 就个人而言,我不认为这是异常安全的,因为如果在进入try块之前出现异常怎么办? 然后你的资源就会泄露。 不过,我 ...
这种方法不安全吗? 还是createFoo返回shared_ptr<Foo>对象更可取? ...
我只是一个初出茅庐的程序员,至少尝试编程而不是最好的情况。 我一直在阅读Herb Sutter的“Exceptional C ++”,并且到目前为止已经完成了三次异常安全章节。 然而,除了他提出的一个例子(一个堆栈),我不确定我应该在什么时候努力争取异常安全与速度以及何时这样做是非常愚蠢的。 ...
每当我需要将动态分配的对象添加到向量中时,我一直在做以下方式: 它只是工作,许多其他人似乎做同样的事情。 今天,我学会了vector :: push_back可以抛出异常。 这意味着上面的代码不是异常安全的。 :-(所以我提出了一个解决方案: 但问题是新的方式冗长乏味, ...
编辑:我应该提到,我在看Boost的ptr_sequence_adapter的文档 ,它声称它们的template< class U > void push_back( ::std::auto_ptr<U> x );适配器template< class U > ...
在回答有关std::stack::pop() 我声称 pop不返回值的原因是出于异常安全原因(如果复制构造函数抛出会发生什么)。 @Konrad评论说现在有了移动语义,这已经不再适用了。 这是真的? AFAIK,移动构造函数可以 throw ,但也许没有noexcept它仍然可以实 ...
请假设我有一个接受指针作为参数的函数。 此函数可以抛出异常,因为它使用std::vector<>::push_back()来管理此指针的生命周期。 如果我这样声明: 并称之为: 如果它抛出异常将指针推入std::vector<> ,我实际上有内存泄漏, ...
我正在使用.Net HtmlTextWriter生成HTML。 在此示例中,如果在myObject.GenerateHtml()期间引发了错误异常,我将生成一个不错的错误html,但它之前将带有一个从未关闭的开放span标记。 我可以这样重构 现在我的跨度还没有打开,直到我 ...
我只是不记得用于此及其他相关属性的术语。 编辑-也许这样的概念不存在,但我记得在“有效C ++”(或“更有效C ++”)中读过一些东西,他主张使用交换来在函数中最后提交更改,因为保证了向量交换函数不会引发异常。 ...