首页 > 编程语言 >C++拷贝控制技术

C++拷贝控制技术

时间:2023-05-24 20:56:27浏览次数:39  
标签:const 对象 C++ 控制技术 编译器 引用 拷贝 赋值

  1. 模板特例如何写忘了
  2. 拷贝noexcept

     如果可以确认不会抛出异常,交换两个指针就行了

  3. swap是命名空间里的某个,更改的时候需要加上该命名空间

     特例函数怎么写,就这样。inline的位置值得注意

  4. "=”运算符重载

  5.  

    两种拷贝一致 

  6. 不可拷贝的方式

    1.   编译器会想方设法为我们设置一个默认的拷贝
    2. 有一个不可拷贝的成员对象
    3. 继承自一个不可拷贝的类
    4. 任何对象至少有一字节 空的类也不会0
    5. 空基类优化  继承自一个空类它就真的是空的,编译器帮我们优化
    6. 所以我们采用继承的方式

       因为它的基类无法生成拷贝

  7. 继承是个秘密

     任何依赖于知道继承的关系的操作都不行了

  8. 抽象类操作
    1.   返回值可以是对象的指针,要与抽象类一致或者是斜变
    2.  

    3. const要从逻辑来考虑,不是仅仅是元素

       按理来说可以写成const因为shape类的数据成员是bp,bp其实没有被改变,没有被改变意思是说吧bp指向的对象没变,只是对象的数据改变了。但是用户理解是它伸缩了

  9. 代理类surrogate
    1.   支持动态绑定
    2. 内存管理,不用手动释放

  10. 引用计数
    1.   一个人什么时候真正死亡,是他的肉体死亡吗?不是,当这个世界上没有任何一个人再记住他的时候
    2. 值语义、引用语义
    3. 句柄:一种代理类 添加引用计数,当计数为0销毁对象
    4. 懒惰赋值

  11. 拷贝新的开始 没有销毁就不会创建
    1.   发生了几次拷贝

       自17起不再把返回值拷贝

    2. 拷贝控制
      1.   拷贝构造函数

         写参数的时候一定要首先考虑可不可以用常量引用,如果不写引用,他会首先发生临时变量赋值,这时候就会调用拷贝构造函数,无限递归了。如果不写const首先他不规范,其次去除底层const

      2. 拷贝复制运算符
        1.  返回this引用可以连续赋值,这是一种规范

        2. 赋值运算符重载一定要避免自我复制 V1=V1看起来很蠢,但是V1可能等于它的引用

           当首先销毁自身时也同时销毁了赋值对象

        3.  正确的做法 先复制,异常安全

        4. 不是异常安全的看似的做法

  12. 默认的拷贝构造
    1.   逐个成员复制
    2. 类对象,调用类的拷贝构造
    3. 不可拷贝对象,没办法也不报错
    4. 数组成员可以正确拷贝,编译器知道它是数组,指针就不是数组
  13. 默认函数,编译器有一定能力合成的函数=default

  14. 三大律

     这个类有一定的资源,或者这三个函数不好写、

  15. 禁止拷贝
    1.   比如输入流cin
    2. =delete 所有函数都可以=delete

       如果编译器帮你生成默认函数发生错误时隐式delete

    3. 之前是把拷贝弄成private,类内或者friend 只声明不定义,编译器发生连接错误,连接错误是运行错误,不是编译错误
  16. explicit声明

     显式构造,不允许隐式类型转换

  17. logic const

     不是const,可变对象,这个对象可不变对用户没有任何影响,在逻辑上依然是const,但是如果不写mutable肯定是不行的,因为编译器不允许在const里更改修改值

  18. decltype类型推导

     只用类型,不去计算,完完整整保留

     i加个()就是表达式,表达式的返回值就是左值是引用

标签:const,对象,C++,控制技术,编译器,引用,拷贝,赋值
From: https://www.cnblogs.com/lvshy/p/17429461.html

相关文章

  • c++打卡练习(38)
    求一个范围内的所有素数流程图:伪代码:源代码:#include<iostream>usingnamespacestd;intmain(){ intstart,end,i,j,m=0; cout<<"给定你所要求的素数的范围:"<<endl; cin>>start; cin>>end; cout<<start<<"到"<<end<<"之......
  • CMake入门教程:从零开始构建C/C++项目
    CMake是一个跨平台的自动化构建工具,可以用于构建各种类型的项目,包括C++、C、Python、Java等。本文将从零开始,介绍如何使用CMake构建一个简单的C/C++项目安装CMake首先,需要下载并安装CMake。可以从CMake官网下载。如果404NotFound,可以试一下这个国内镜像网址下载地址。创......
  • 深入浅出 C++ 11 右值引用
    彻底搞清楚:右值引用/移动语义/拷贝省略/通用引用/完美转发——以最短的篇幅,介绍常见误解(什么时候要用move?什么时候不能move?为什么move失败?)和基础知识(为什么右值引用变量是左值?为什么会调用移动构造函数?),一步步解释“为什么/是什么/怎么做”。写在前面如果你还不知道C++11......
  • C++右值引用
    右值引用应该是C++11引入的一个非常重要的技术,因为它是移动语义(Movesemantics)与完美转发(Perfectforwarding)的基石:移动语义:将内存的所有权从一个对象转移到另外一个对象,高效的移动用来替换效率低下的复制,对象的移动语义需要实现移动构造函数(moveconstructor)和移动赋值运算符(mo......
  • 各个版本Microsoft Visual C++官方下载链接
     MicrosoftVisualC++2005MicrosoftVisualC++2005RedistributablePackage(32位)http://download.microsoft.com/download/8/B/4/8B42259F-5D70-43F4-AC2E-4B208FD8D66A/vcredist_x86.exeMicrosoftVisualC++2005RedistributablePackage(64位)http://download.......
  • C/C++超市商品管理系统[2023-05-24]
    C/C++超市商品管理系统[2023-05-24]9、超市商品管理系统问题描述:设计并实现一个超市商品管理系统,商品需设置不同的类型,系统可以实现对商品信息的添加,修改,删除,查找等功能,商品信息需要以文件方式保存到计算机硬盘中。基本功能:(1)商品要设置不同的类型,如水果、饮料等;(2)商品信息包......
  • 使用QtCreator C++编写串口调试助手
    Qt小白一枚,喜欢嵌入式应用,以前都是使用别人的串口调试助手,学习了C++以后,自己也尝试着做了简单的串口调试助手,分享给大家吧,希望能帮助到大家,如果有错误,请大家指正。话不多说开干!1.首先看一下我设计的界面(我这里比较简单,大家可根据自己的需求进行设计)(界面设计的过程中,每一个控件......
  • 入门指南:学习C++编程的关键步骤
    C++是一种功能强大的编程语言,广泛应用于软件开发和系统编程。如果您想学习C++编程,下面是一些关键的步骤,可以帮助您入门。安装C++编译器要开始学习C++,您需要安装一个C++编译器。常用的C++编译器有GCC、Clang和MicrosoftVisualC++等。您可以根据自己的操作系统选择适合的编译器,并......
  • c++ base64 编码
    #include<iostream>#include<string>#include<vector>#include<cryptopp/base64.h>#include<cryptopp/filters.h>std::stringBinaryToBase64(conststd::vector<unsignedchar>&data){std::stringencoded;C......
  • 深拷贝手写
    letarr=["张三","李四","王五",[1,2,3,4,5]];functiondeepCopy(obj1){letobj2=Array.isArray(obj1)?[]:{};for(letkeyinobj1){//hasOwnProperty:自身属性会返还true,否则会返还fal......