• [C++][STL]STL中的事务安全(transaction safe)


    transaction safe即commit-or-rollback,在数据库里很常见。

    如果一个操作是事务安全的,即表示:在执行操作时发生意外导致操作没有完成,该操作所有已经完成的修改均会自动撤销。

    在C++中,上文所述的“意外”是指异常,如果一个操作不会抛出异常,那么它是永远“成功执行”的(设计者这么看,使用不当会发生不可预期后果),这样的操作不涉及事务安全。

    STL在guarantee和性能之间更倾向于后者,不完全保证事务安全。

    STL容器分为两类

    node-based: 以指针连接各节点。

      有以下容器:list, set, multiset, map, multimap

      不涉及事务安全:销毁删除节点(单节点+多节点),销毁对象

      保证事务安全:插入节点(单节点)

      不保证事务安全:插入节点(多节点),但对list除外

      list是特殊的,它几乎保证所有操作的事务安全:remove(), remove_if(), merge(), sort(), unique()

    array-based: 各节点在内存中连续存储

      有以下容器:vector, deque

      不涉及事务安全:销毁删除节点(单节点+多节点),销毁对象

      保证事务安全:端点处的插入、取出(自然是单节点),修改节点(单节点)

      不保证事务安全:其他位置的插入、取出(单节点+多借点)

  • 相关阅读:
    lua编程之协程介绍
    lua编程之元表与元方法
    设计模式系列之单例模式
    设计模式系列之生成器模式
    设计模式系列之抽象工厂模式
    设计模式系列之原型模式
    设计模式系列之工厂模式
    stl源码分析之hash table
    2018/2019款 MacBookPro 接口失灵的原因及解决方案
    test
  • 原文地址:https://www.cnblogs.com/SelaSelah/p/2466162.html
Copyright © 2020-2023  润新知