编译环境:VS2022,C++14,对比测试如下:

测试一:

#include <iostream>class CTestA {
public:CTestA() {printf("CTestA-contruct\n");}CTestA(const CTestA& other) {printf("copy-construct");}CTestA& operator=(const CTestA& other) = delete;
};
int main()
{CTestA oa = CTestA();//输出结果如下 //CTestA-contruct
}

通过该测试知道:CTestA oa = CTestA()这行代码导致了构造函数被调用,但拷贝构造函数并没有使用,operator=也没有被调用。

测试二:

#include <iostream>class CTestA {
public:CTestA() {printf("CTestA-contruct\n");}CTestA(const CTestA& other) = delete;CTestA& operator=(const CTestA& other) = delete;
};
int main()
{CTestA oa = CTestA();}

该测试无法通过,编译错误如下
    //1>E:\UETest\TestCPP\TestCPP.cpp(18,1): error C2280: “CTestA::CTestA(const CTestA &)”: 尝试引用已删除的函数。

这说明,编译时会尝试调用拷贝构造函数!

这就非常奇怪了,通过测试一我们知道拷贝构造函数不会被调用,而这里又证明它会被调用!

没搞明白这是怎么回事,猜想可能是编译时确实会调用拷贝构造函数,但运行时被优化掉了?

一个非常奇怪的C++拷贝构造函数问题相关推荐

  1. C++ 笔记(17)— 类和对象(构造函数、析构函数、拷贝构造函数)

    1. 构造函数 构造函数是一种特殊的函数(方法),在根据类创建对象时被调用.构造函数是一种随着对象创建而自动被调用的函数,它的主要用途是为对象作初始化. 构造函数的名称与类的名称是完全相同的,并且不会 ...

  2. display函数怎么使用_Chapter19:拷贝构造函数

    对于计算机来说,拷贝是指用一份原有的.已经存在的数据创建出一份新的数据,最终的结果是多了一份相同的数据.在 C++中,拷贝并没有脱离它本来的含义,只是将这个含义进行了"特化",是指 ...

  3. C++拷贝构造函数详解

    一. 什么是拷贝构造函数 首先对于普通类型的对象来说,它们之间的复制是很简单的,例如: [c-sharp] view plaincopy int a = 100; int b = a; 而类对象与普通 ...

  4. C++拷贝构造函数、深拷贝、浅拷贝

    对于普通类型的对象来说,它们之间的复制是很简单的,例如: int a=88; int b=a;  而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量.下面看一个类对象拷贝的简单例子. ...

  5. C++类对象的拷贝构造函数(转载)

    对于普通类型的对象来说,它们之间的复制是很简单的,例如: int a=100; int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量.下面看一个类对象拷贝的简单例子. ...

  6. C++拷贝构造函数(深拷贝,浅拷贝)

    对于普通类型的对象来说,它们之间的复制是很简单的,例如: int a=88; int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量.下面看一个类对象拷贝的简单例子. ...

  7. 拷贝构造函数的调用以及浅拷贝与深拷贝的理解

    今天一直在研究拷贝构造函数相关的东西,我这个大四老狗感觉又回到了大一学C++的时候.瞎捣鼓了一天,略微还是有些收获的,趁着脑子中的概念正热,把自己的心得赶紧整理出来分享给大家. ​       首先简 ...

  8. C++:构造函数2——拷贝构造函数

    前言:拷贝构造函数是C++中的重点之一,在这里对其知识进行一个简单的总结. 一.什么是拷贝构造函数 在C++中,对于内置类型的变量来说,在其创建的过程中用同类型的另一个变量来初始化它是完全可以的,如: ...

  9. C++ Primer 5th笔记(chap 13 拷贝控制)拷贝构造函数

    1. 拷贝构造函数 如果一个构造函数的第一个参数是自身类类型的引用,且任何额外参数都有默认值,则此构造函数是拷贝构造函数. class Foo{public:Foo();//默认构造函数 (仅在程序员 ...

最新文章

  1. c++中的public,protected,private
  2. 在SQL Server中使用JOIN更新表?
  3. 如何系统学习机器学习?
  4. redhat 添加ssh端口_RHEL 7修改ssh默认端口号
  5. laravel框架中引入Workerman
  6. NHibernate获取实体配置信息(表名,列名等等)
  7. webpack打包测试_webpack入门笔记(一)
  8. C#读取xml文件静态类
  9. android不同应用程序之间启动Activity
  10. Vue 移动端跳到手机拨打电话界面的几种方法
  11. 经济数学—线性代数第二版课后习题解析 吴传生 编|高等教育出版社 大学课后习题答案
  12. 1.2 Illustrator多文档的几种排列方式
  13. 2.5寸移动硬盘盒改装 驱动3.5寸台式机硬盘
  14. 直销立法前狼奔豕突 非法传销组织如何转型
  15. linux终端vi怎么输入日历,Remind: 命令行的 calendar 及 todo list
  16. html中如何使阴影正片叠底,两种方法让你的PPT做出「正片叠底」的效果!
  17. 7、osg中响应键盘鼠标事件以及鼠标和键盘编码表
  18. vue族谱架构_基于 Vue 实现动态家谱图/组织结构图
  19. 如何将树莓派网关连接到TTN——手把手教你如何将树莓派网关连接到服务器之第四篇
  20. python随机森林变量重要性_python机器学习之随机森林(七)

热门文章

  1. 2020年12月份学习总结,PMP与信息系统项目管理师的回顾
  2. 信息系统项目管理师-信息安全管理考点笔记
  3. SpringCloud-服务注册与实现-Eureka创建服务注册中心(附源码下载)
  4. SpringBoot+jquery实现post提交表单并添加隐藏域属性完成编辑功能
  5. MyBatisPlus3.x代码生成器生成实体类自定义需要填充的字段
  6. Tkinter的Scrollba组件
  7. 数据库系统概念总结:第七章 数据库设计和E-R模型
  8. No enclosing instance of type JDStudent is acAcessible. Must qualify the allocation with an enclosin
  9. 4、SpringBoot 配置和使用定时任务
  10. atlas安装需要kafka吗_Apache Atlas安装使用说明文档