首先:是boost :: noncopyable还是booster :: noncopyable。我在不同的地方见过。
为什么要让一个类不可复制?你能举一些样例用例吗?
答案 0 :(得分:4)
每当你有一个类指针作为该类所拥有的成员变量(即负责销毁)时,我发现它很有用。除非您使用shared_ptr<>
或其他一些引用计数的智能指针,否则您无法安全地复制或分配类,因为在析构函数中您需要delete
指针。但是,您不知道是否已经获取了该类的副本,因此您将从取消引用释放的指针获得双重删除或访问冲突。
如果您继承自noncopyable
,那么它有两个好处:
例如
class MyClass : boost::noncopyable
{
...
};
答案 1 :(得分:3)
boost
的正确值是boost::noncopyable
。
它用于防止像名称那样复制对象。在复制导致非常难以处理的情况下,这是有道理的。一个示例是包含文件句柄或网络连接概念的类,如documentation中所述。释放/关闭资源或文件会出现问题。如果你有很多副本,你将如何处理它。您可以使用一些引用计数,但如果您在某些地方解开手柄,则很难正确处理......
就个人而言,我发现它在实现单例模式时最明确和最有用的用法,你真正想要只有一个实例,在这种情况下你显然不希望是可复制的。单例确保只能创建一个类的一个实例来保存一些全局资源,例如系统配置。