【发布时间】:2011-03-31 22:29:18
【问题描述】:
首先:它是 boost::noncopyable 还是 booster::noncopyable。我在不同的地方都见过。
为什么要让一个类不可复制?能否提供一些示例用例?
【问题讨论】:
标签: c++ boost noncopyable
首先:它是 boost::noncopyable 还是 booster::noncopyable。我在不同的地方都见过。
为什么要让一个类不可复制?能否提供一些示例用例?
【问题讨论】:
标签: c++ boost noncopyable
只要你有一个类有一个指针作为该类拥有的成员变量(即负责销毁),我发现它很有用。除非您使用shared_ptr<> 或其他一些引用计数的智能指针,否则您不能安全地复制或分配该类,因为在析构函数中您需要delete 指针。但是,您不知道该类的副本是否已被获取,因此您会因取消引用已释放的指针而导致双重删除或访问冲突。
如果你继承自noncopyable,那么它有两个好处:
例如
class MyClass : boost::noncopyable
{
...
};
【讨论】:
boost 的情况下正确的是boost::noncopyable。
顾名思义,它用于防止复制对象。在复制导致非常难以处理的情况下,这是有道理的。一个示例是包装文件句柄或网络连接概念的类,如documentation 中所述。释放/关闭资源或文件会出现问题。如果您有很多副本,您将如何处理。您可以使用一些引用计数,但如果您在某些地方打开句柄,则很难正确处理......
就我个人而言,我发现它最清晰和最有用的用法是实现单例模式,在这种模式下,您真的只想拥有一个实例,在这种情况下,您显然不想被复制。单例确保只能创建一个类的一个实例来保存一些全局资源,例如系统配置。
【讨论】: