3

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

为什么要让一个类不可复制?你能给出一些示例用例吗?

4

2 回答 2

5

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

如果你从那里继承noncopyable它有两个好处:

  • 它可以防止类被复制或分配
  • 通过查看类定义(即自记录代码)可以清楚地表明意图

例如

class MyClass : boost::noncopyable
{ 
   ...
};
于 2010-08-20T13:39:36.547 回答
3

在这种情况下,正确的boostboost::noncopyable

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

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

于 2010-08-19T05:16:32.953 回答