首页 > 编程语言 >c++ 删除 类的拷贝和赋值函数

c++ 删除 类的拷贝和赋值函数

时间:2023-08-29 11:37:19浏览次数:56  
标签:HttpSchemeFactory 函数 C++ 编译器 c++ 拷贝 赋值

 

 

#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 缓冲。
还有一些类持有的数据特别多,这就会导致拷贝或赋值非常损耗性能,基于这方面的理由,它们也会阻止拷贝和赋值行为。

 

标签:HttpSchemeFactory,函数,C++,编译器,c++,拷贝,赋值
From: https://www.cnblogs.com/angdh/p/17664305.html

相关文章

  • C++运算符重载
    C语言是没运算符重载的,C++进行了扩充。C++比C语言多了面向对象(类),多了函数重写,运算符重载,实现了(函数重载跟运算符重载都属于编译器静态绑定了地址,所以是静态多态,而虚函数需要在运行期确定,是动态多态)。 如何实现C++跟C语言混合编程?extern"C",其修饰的代码段需要以C语言的方式进......
  • C++11新特性
    文章目录一、关键字及新语法二、STL容器三、多线程四、智能指针五、其他特性一、关键字及新语法列表初始化:inta{10}。auto:自动类型推导。nullptr:空指针。范围for:for(autov:vec)。二、STL容器vector:动态数组。list:双向链表。deque:双端队列。priority_queue:优先队列。map、se......
  • 面向对象(构造、析构、拷贝、赋值、友元)
    文章目录一、面向对象的基本概念1、面试题--->面向对象的基本原则?2、面试题--->空类会创造哪些成员函数?二、类和结构体1、面试题--->类和结构体的区别?三、成员变量及其初始化四、构造函数和析构函数1、构造函数和析构函数的调用顺序2、面试题--->析构函数为什么要定义为虚函数?3、......
  • ArrayList两个对象之间的赋值
    错误的赋值:list1=list2;这种方法只是将list2的地址赋值给了list1。原先对象会被垃圾回收机制回收掉。正确的赋值:List<String>list1=newArrayList<String>();//方法一:利用集合自带的构造方法List<String>list2=newArrayList<String>(list1);//方法二:利用克隆的方......
  • C++语言学习02
    一、函数重载1、什么是函数重载在同一作用域下,函数名相同,参数列表不同的函数构成重载关系函数重载与返回值的类型、参数名无关与作用域是否相同,以及参数列表的数量、参数类型、常属性不同等有关2、C++是如何实现函数重载的?通过g++-S的方式生成汇编代码可以知道,编译器......
  • C++如何写一个简单的DLL文件
     这个东西其实挺简单的,刚开始写的时候,是在VC的编译器上,按照前人的步骤,老失败,折腾我一天了,结果,我换了个编译器,在vs08的平台上,就成功了,好了,不多少了,分享一下:首先建立一个MyDll的win32项目中建立一个DLL类型的工程,然后创建一个CPP文件,取名MyDll,内容如下:extern"C"__declspec(dllex......
  • JavaScript 中的变量声明与赋值
    在计算机编程中,使用名称(或标识符)来表示值是最基本的技术之一。将名称与值绑定为我们提供了一种在程序中引用值并利用它们的方式。当涉及到绑定名称与值时,我们通常称之为将值赋给变量。术语“变量”暗示了新的值可以被赋给它,这意味着与变量关联的值在程序执行过程中可能会改变。如......
  • JS手写代码实现深拷贝
    /***深拷贝*/constobj1={age:20,name:'xxx',address:{city:'beijing'},arr:['a','b','c']}constobj2=obj1obj2.address.city='shanghai'console.log(o......
  • C++ Bjarne Stroustrup
    来自C++之父BjarneStroustrup的人生建议https://mp.weixin.qq.com/s/CULLZELkJpbLJxkGjFxzVA来自C++之父BjarneStroustrup的人生建议 不要过度专业化。不要太笃定自己知晓未来。保持灵活性,记住职业和工作是一个长期的事情。太多的年轻人认为他们可以优化某些东西,然后他们发......
  • 标准C++ -- day06
    一、什么是继承当遇到问题时,先查看现有的类是否能解决一部分问题,如果有则继承该类,并在此基础上扩展以此解决问题,从而缩短解决问题的时间(代码复用)当遇到一个大而复杂的问题时,可以把大问题拆分成若干个不同的小问题,然后为每个小问题设计一个类来解决,最后通过继承的方式把这......