【问题标题】:What are use cases for booster::noncopyable?booster::noncopyable 的用例是什么?
【发布时间】:2011-03-31 22:29:18
【问题描述】:

首先:它是 boost::noncopyable 还是 booster::noncopyable。我在不同的地方都见过。

为什么要让一个类不可复制?能否提供一些示例用例?

【问题讨论】:

    标签: c++ boost noncopyable


    【解决方案1】:

    只要你有一个类有一个指针作为该类拥有的成员变量(即负责销毁),我发现它很有用。除非您使用shared_ptr<> 或其他一些引用计数的智能指针,否则您不能安全地复制或分配该类,因为在析构函数中您需要delete 指针。但是,您不知道该类的副本是否已被获取,因此您会因取消引用已释放的指针而导致双重删除或访问冲突。

    如果你继承自noncopyable,那么它有两个好处:

    • 它可以防止类被复制或分配
    • 从类定义来看,意图就很清楚了,即自我记录的代码

    例如

    class MyClass : boost::noncopyable
    { 
       ...
    };
    

    【讨论】:

      【解决方案2】:

      boost 的情况下正确的是boost::noncopyable

      顾名思义,它用于防止复制对象。在复制导致非常难以处理的情况下,这是有道理的。一个示例是包装文件句柄或网络连接概念的类,如documentation 中所述。释放/关闭资源或文件会出现问题。如果您有很多副本,您将如何处理。您可以使用一些引用计数,但如果您在某些地方打开句柄,则很难正确处理......

      就我个人而言,我发现它最清晰和最有用的用法是实现单例模式,在这种模式下,您真的只想拥有一个实例,在这种情况下,您显然不想被复制。单例确保只能创建一个类的一个实例来保存一些全局资源,例如系统配置。

      【讨论】:

        猜你喜欢
        • 2016-08-31
        • 1970-01-01
        • 2012-03-05
        • 2011-06-17
        • 1970-01-01
        • 2022-01-12
        • 2010-10-09
        • 2012-11-03
        相关资源
        最近更新 更多