c++ 删除 类的拷贝和赋值函数
  QFbc3MtZbTbh 2023年11月02日 30 0

 

 

#pragma once
#include "include/cef_app.h"
class HttpSchemeFactory :public CefSchemeHandlerFactory
{
public:
    HttpSchemeFactory() = default;    
    //删除拷贝函数
    HttpSchemeFactory(const HttpSchemeFactory&) = delete;
    //删除赋值函数
    HttpSchemeFactory& operator=(const HttpSchemeFactory&) = delete;
    //处理请求的方法定义
    CefRefPtr<CefResourceHandler> Create(CefRefPtr<CefBrowser> browser, CefRefPtr<CefFrame> frame, const CefString& scheme_name, CefRefPtr<CefRequest> request) override;
private:
    IMPLEMENT_REFCOUNTING(HttpSchemeFactory);
};

 

 

C++ 对象的赋值行为:MyObj myObj1('initStr'); MyObj myObj2; myObj2=myObj1;

C++ 对象的拷贝行为:MyObj myObj1('initStr'); MyObj myObj2(myObj1);

在 HttpSchemeFactory 类中,我们通过 delete 关键字阻止了这两种行为。
对于一个 C++ 的类来说,即使开发者没有提供拷贝函数和赋值函数,编译器也会为这个类生成默认的拷贝函数和默认的赋值函数。
编译器的这个行为在大多数情况下是有益的,因为对于一个普通的 C++ 类来说,拷贝和赋值是两项基本的操作,
编译器提供了默认实现,就不需要开发者为这些类撰写相应的代码了。

但有些类涉及到一些资源操作或跨进程异步操作,不希望编译器提供这两种行为的默认实现,
比如: C++ 标准库中的 iostream 类就阻止了拷贝行为,以避免多个对象写入或读取相同的 IO 缓冲。
还有一些类持有的数据特别多,这就会导致拷贝或赋值非常损耗性能,基于这方面的理由,它们也会阻止拷贝和赋值行为。

 



【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  xblwJ8BTpGrI   2023年12月22日   30   0   0 赋值JavaJava赋值
QFbc3MtZbTbh