exception-safety

    0热度

    1回答

    MSDN和other places说uninitialized_copy提供了强有力的异常保证,但other C++引用don't。 这实际上是由C++保证的,还是不是?

    1热度

    2回答

    我在写一个简单的内存竞技场分配器,并面临一个异常安全的小问题。情况是当你分配一个本身调用分配器的对象时。内存池的目标是一次分配一堆对象,然后在池被销毁时全部删除它们。 { MemoryArena m; std::string* ptr = m.Allocate<std::string>(); // use ptr whatever // Cleaned up

    0热度

    7回答

    如何确保某个类的某个实例永远不会为空?有人告诉我使用Debug.Assert(),但通过这样做,我只能确保代码在调试模式下工作,而我想确保发行版中的is-never-null条件。 例如,在过去,我写了这样的代码: public string MyString { get { if(instance1.property1.Equals("bla")) { re

    9热度

    3回答

    我继续读那swap()操作,像这样的例子: template<class T> void swap (T &a, T &b) { T temp (a); a = b; b = temp; } 是有问题的,当我们面对的是异常安全。 它有什么问题? 此外,我们如何解决它?

    3热度

    2回答

    鉴于Jon Kalb用于解决Cargill Widget示例的强大的异常安全代码,是什么阻止了编译器重新组织操作,从而使代码不具有强大的异常安全性? #include <algorithm> // std::swap template< typename T1, typename T2 > class Cargill_Widget { public: Cargill_Widge

    4热度

    3回答

    我正在讨论如何正确处理容器参数。 我们有一个函数,它在容器参数,并希望只返回装满容器什么功能付诸它: class bar; void foo(std::vector<bar> &bars) { //do stuff that fills bars. //exceptions may be thrown. //we may also legally return

    20热度

    1回答

    考虑以下几点: std::vector<std::unique_ptr<int>> ptrsToInts; ptrsToInts.emplace_back(new int); 如果矢量发生重新分配,而失败(投掷std::bad_alloc),我是“安全”或者我会泄漏一个int? C++ 11 23.3.6.5 [vector.modifiers]/1表示: 如果异常比由复制构造抛出其他,移动

    4热度

    3回答

    编写类(使用copy-and-swap idiom)时的一般指导原则是提供非抛出交换成员函数。 (Effective C++, 3rd edition, Item 25和其他资源) 但是,如果我不能提供nothrow保证,因为我的课程使用不提供交换操作的第三方类成员? // Warning: Toy code !!! class NumberBuffer { public: ...

    1热度

    2回答

    给定以下代码:我们需要锁定模型,然后启动一个事务(这可能会抛出一个异常,因此我们必须确保锁被释放),然后执行某种类似获取数据库连接的操作(这可能会导致一个例外),然后做一些可能会抛出异常的事情,要求事务恢复。这是Java 6,所以我们没有Java 7的好东西可用。 SomeClass someMethod() throws SomeException { acquireWriteLoc

    4热度

    1回答

    我试图找到一个在线参考来查看几个std容器的异常安全。 在std::vector的情况下,它是否保持push_back调用之前的状态?我会假定矢量的所有对象仍然有效(没有调用析构函数)。在push_back抛出std::bad_alloc异常之后,std::vector提供了哪些保证?