当前位置: 首页 > news >正文

东莞建设公司网站打开网站代码

东莞建设公司网站,打开网站代码,百度号码认证平台个人号码申诉,微信wordpress插件🍉 重点:编译器生成构造函数的四种情况,如何避免copy constructor在子类多个调用 当我们指定一个class object给另一个class object时,通常有三种选择: 什么都不做,实施默认的行为。 提供一个explicit copy assignme…
🍉 重点:编译器生成构造函数的四种情况,如何避免copy constructor在子类多个调用

当我们指定一个class object给另一个class object时,通常有三种选择:

  1. 什么都不做,实施默认的行为。

  2. 提供一个explicit copy assignment operator。

  3. 显式地拒绝指定一个class object给另一个class object,声明为private(并且此时不同函数的定义,一旦某个member function或friend企图影响一份拷贝,程序链接时就会失败)。

利用Point class来帮助讨论:

class Point {
public:Point(float x = 0.0, float y = 0.0);
private:float _x, _y;
};

如果不对class point提供copy assignment operator,光是依赖默认的memberwise copy,编译器不会产生出一个实例,因为此class已经有了bitwise copy语意,所以implicit copy assignment operator被视为毫无用处,根本不会合成出来。

一个class对于默认的copy assignment operator,在以下情况下,不会表现出bitwise copy语意

  • 当class内含一个class object,而其class有个copy assignment operator时

  • 当一个class的base class有个copy assignment operator是

  • 当一个class声明了任何virtual function(一定不要拷贝右端class object的vptr地址,因为他可能是一个derived class object)时

  • 当一个class继承自一个virtual base class(不论base class有没有copy operator)时

如果没有为Point3d设定一个copy assignment operator,编译器就会为其合成一个:

inline Point3d&
Point3d::operator=(point3d* this, const Point3d& p) {this->Point::operator=(p);  //base class operator=_z = p._z;  //memberwise copyreturn *this;
}

copy assignment operator缺乏一个member assignment list,类似于成员初值列,比如

inline Point3d&
Point3d::operator=(const Point3d& p): Point(p), _z(p._z) { }    //这是不支持的,只能写成上面合成的形式

缺少 member assignment list,编译器一般就没有办法压抑上层 base class 的 copy operator 被调用。还是考虑之前的继承体系,类 Vertex 虚拟自 Point ,并且从 Point3d 和 Vertex 派生出Vertex3d。则copy operator 如下:

inline Vertex&
Vertex operator=(const Vertex& v) {this->Point::operator=(v);_next = v._next;return *this;
}
inline Vertex3d&
Vertex operator=(const Vertex3d& v) {this->Point::operator=(v);this->Point3d::operator=(v);this->Vertex::operator=(v);return *this;
}

编译器如何在 Point3d 和 Vertex 的 copy assignment operator 压制 Point 的 copy assignment operator呢?constructor 中的解决办法是添加一个额外的参数 __most_derived。解决办法是:为copy assignment operator 提供分发函数(split functions)以支持这个 class 称为 most-derived class或者成为中间的 base class。

尽可能不要允许一个 virtual base class 的拷贝操作,更进一步,不要在任何 virtual base class 中声明数据

http://www.dtcms.com/a/545056.html

相关文章:

  • 瑞萨SDK编译linux时,make menuconfig报错
  • 自助公益网站建设如何进行网站开发
  • 仓颉语言相机拍照功能实现深度解析
  • **发散创新:AI绘画编程探索与实践**随着人工智能技术的飞速发展,AI绘
  • linux命令-文件目录操作-1
  • 【完整源码+数据集+部署教程】【制造业&传送带】几何形状检测系统源码&数据集全套:改进yolo11-DGCST
  • 面试的时候项目怎么聊,才能发挥最大的价值
  • PsTools 学习笔记(7.2):通用功能与远程操作基础
  • 做网站浏览器必须用xp系统吗张掖市作风建设年活动网站
  • 内江网站建设公司清华建设工程有限公司公司网站
  • VxWorks入门小白菜鸟教程4 —— 异步I/O库(AIO)的使用
  • 基于k8s部署wordpress博客系统并实现数据的持久化
  • SQL 查询语句的子句的执行顺序
  • sql 双游标循环
  • SQL 189 统计有未完成状态的试卷的未完成数和未完成率
  • 有哪些做微信小游戏的网站建设网站后期人员薪酬
  • 黑龙江交通基础设施建设网站怎么做推广网站
  • 企业微信AI SCRM推荐:从技术适配与场景功能实践进行评估
  • 从开源到落地:SimpleBGC 三轴稳像平台全栈技术解析(下)
  • 零基础新手小白快速了解掌握服务集群与自动化运维(十六)集群部署模块——Keepalived双机热备
  • 网站建设论坛做一个网站的流程
  • 金仓数据库平替MongoDB:银行存款系统国产化实践
  • 基于 Spring AI Alibaba 搭建 Text-To-SQL 智能系统(前置介绍)
  • 搞笑资讯网站源码数据库支持的网站怎么做
  • 友思特应用 | 基于高精度双目散斑 3D 相机的放射治疗视觉定位应用
  • MCU寄存器配置深度解析:从原理到实践
  • 论文学习_LLM4Decompile: Decompiling Binary Code with Large Language Models
  • 【日记】好耶!是新电脑!(3959 字)
  • Day73 嵌入式传感器技术全栈开发
  • 学历提升有几种方式长沙正规seo优化公司