繁体   English   中英

booster :: noncopyable有哪些用例?

[英]What are use cases for booster::noncopyable?

首先:是boost ::不可复制还是booster ::不可复制。 我在不同的地方见过。

为什么要使一类不可复制? 您可以举一些示例用例吗?

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

如果从noncopyable继承,则有两个好处:

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

例如

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

boost情况下, boost::noncopyableboost::noncopyable

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM