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