[读书笔记] Inside C++ Object笔记(第5章: 关于ctor/dtor/copy-ctor/op=)

大模型面试题52:LLM如果在训练过程中loss值出现spike应该怎么办? 小白急救:停更→回滚→降LR→裁剪梯度,先保住训练不崩溃;进阶排查:查数据→查优化器→查硬件,找到spike的根因并解决;深层预防:预处理保守配置+训练中实时监控,从源头规避spike。先止损,再溯源,最后预防。 阅读详情
1. typedef struct
{
    float x, y, z;
} Point;
编译器并不会产生那个trivial的函数(ctor/dtor/copy-ctor/assign-op),因为它会认为它是一个POD数据结构,程序的行为跟C中的一样。
注意,即使我们往里面增加有参数的构造函数,其它函数也不会被编译器构造出来。因为它们都是trivial的。

2. C++并不支持”临时性的定义“。global在C++中被视为完全定义。C和C++的一个差异是,BSS data segment在C++中相对不重要,C++的所有全局对象都被当作“初始化过的数据”来对待。
所以在C++中,未初始化的内置类型变量,都有初始化过的值,实际上,但是在C中,它们初始值很可能是垃圾数据。

3. C++中可以定义和调用一个pure virtual function,不过它只能被静态的调用,不能经由虚拟机制调用。
唯一的例外是pure virtual dtor,class设计者一定得定义它。因为每一个子类的dtor会被编译器扩展,以静态调用的方式调用其"每一个virtual base"和“上一层base class”的dtor。因此,只要缺乏任何一个base class dtor的定义,就会导致链接失败。

4. 在class的ctor的member initialization list中调用该class的一个虚函数,安全码?
就实际而言,将该函数运行于其class‘s data member的初始化行动中,总是安全的。是因为vptr保证能够在member initialization list被扩展之前,由编译器正确设定好。但是在语意上可能不安全,因为这个虚函数可能依赖于一些数据成员。

vptr的初始化操作发生在什么时候?
在base class ctor调用操作之后,但是在程序员提供的代码或是member initialization list中所列的members 初始化操作之前。
注意即使base class初始化代码写在了member initialization list中,它们也是最先进行初始化,然后才是list中其他对象成员的初始化。

5. 继承子类的dtor执行顺序:
1) dtor本身的代码
2)如果class拥有member class objects,而后者拥有dtor,那么它们会以声明顺序相反的顺序被调用;
3)如果object内带一个vptr,则现在被重新设定,指向适当的base class的virtual table
4) base class's dtor 调用
5) virtual base class's dtor调用
当我们在dtor中调用member function时,对象的蜕变会因为vptr的重新设定而受到影响。

【技能】OpenClaw Skills学习及手搓一个极简skill 本文介绍了OpenClaw Skills的基础概念与使用方法。Skills是OpenClaw代理使用工具的核心载体,通过SKILL.md文件定义技能属性和执行方式。技能加载遵循"工作区>本地>内置>自定义目录"的优先级规则。用户可通过ClawHub一键安装现成技能,也可自定义开发技能:创建技能目录,编写包含YAML元数据和执行指令的SKILL.md文件,放置于工作区skills目录进行测试。文章还介绍了多代理场景下的技能共享、插件集成以及安全注意事项,包括沙箱使用和敏感 阅读详情

相关推荐

LSTM预测股票数据---数据预处理

# 导入相应的模块 import pandas as pd import numpy as np import matplotlib.pyplot as plt import tensorflow as tf # 获取训练集 def get_train_data(data,batch_size = 60 ,time_step = 20,train_begin = 0,train_end = 58...

qq_35358021的博客 3360

C++面向对象编程<九>:面向对象-类之间的关系

OOP面向对象:类与类之间的关系,分为三种:Inheritance(继承)、Composition(组合)、Delegation(委托) **基于对象:单一类的封装Composition组合,表示has-a关系看一个栗子,如图此class里有(has-a)deque,常用图来表示类之间的关系。 上面这张图包含一种设计模式:Adapter(适配),含义如下: 已经有deque,但客户需要queu

耗纸的博客 974

R语言,charls数据库清洗、基线特征描述、logistics回归、rcs模型、森林图

【代码】R语言,charls数据库清洗、基线特征描述、logistics回归、rcs模型、森林图。

2402_87751128的博客 2512

c++三大函数:拷贝构造(copy ctor)、拷贝赋值(copy op)、析构函数(dtor)

Class的两个经典分类 Class without pointer member(s) complex Class with pointer member(s) string String class 以下为头文件string.h内容 #ifndef _MYSTRING_ #define _MYSTRING_ //类中进行字符串的构造 class String { ... }; //谨记切勿忘分号 //字符串所具备的功能 String::function(...) ... Global-functi

一个搬运知识的笨小孩 2740

Cadence笔记--原理图导入PCB

根据PCB尺寸画PCB外观尺寸,这里注意X\Y不能超过指定的区域,X\Y的最大值在setuo的grids里设置,画完后保存并关闭工程然后重新打开(不理解为何)由于只画了一个PMU6050,所以这里只有一个器件。工程选择board,选择存储路径和名称。6、重新网格导入,保证网表导入无误;注意网表保存的路径。

weixin_51418325的博客 1958

RISC-V详细介绍

文章目录写在前面什么是RISC-VRISC-V诞生的背景ISA霸权摩尔定律的穷途末路穷困潦倒的学者不断增长的指令数量RISC-V架构设计思想如何设计一个好的ISARISC-V之RV32I四个典型特点RISC-V之乘除法指令指令格式用乘法代替常数除法RISC-V之RV64RISC-V的特权架构机器模式监管者模式 写在前面 本文主要基于RISC-V中文手册,其中包括但不限于一些网络的资料。本文版权属于skywf,转载或借用请联系作者。 什么是RISC-V RISC-V(发音为“risk-five”)是一个基于

skywf的博客 3万+

在 Lua 中实现面向对象

在 pil 中,lua 的作者推荐了一种方案来实现 OO,比较简洁,但是我依然觉得有些繁琐。这里给出一种更漂亮一点的解决方案:为了贴代码和修改方便,我把它贴在了 wiki 上。Lua 中实现面向对象在这个方案中,只定义了一个函数 class(super) ,用这个函数,我们就可以方便的在 lua 中定义类:base_type=class() -- 定义一个基类 base_typefun...

liwy_finder的博客 372

Java对接海康威视明眸门禁设备

海康威视合作生态致力打造一个能力开放体系、两个生态圈,Hikvision AI Cloud开放平台是能力开放体系的核心内容。它是海康威视基于多年在视频及物联网核心技术积累之上,融合AI、大数据、云计算等技术,为合作伙伴提供的一个二次开发及创新的平台。的SDK复制到linux的lib目录下(如果是docker发布,记得做好共享映射哦)大家有没有想过,windows版的SDK为什么要复制到项目根目录的lib文件夹下?所以发布到linux的时候,我们需要将。打开AcsMain文件。................

Good Luck 7875

copy ctor、copy assignment(拷贝构造函数和拷贝赋值函数)

这个很早就搞明白了,只是这里系统整理一下。 例1: 例2: #include<iostream> #include<functional> #include<numeric> using namespace std; // TEMPLATE STRUCT plus template<class _Ty = void> struct my_plus { // functor for operator+ typedef _Ty first_argument_

ShenHang_的博客 1635

MuJoCo 入门教程(一)

在 MuJoCo 仿真中输入自定义数字有三种方法。首先,可在 XML 中定义全局数字字段。它们有一个名称和一个实数值数组。其次,可以通过特定元素的自定义数组来扩展某些模型元素的定义。具体方法是在 XML 元素大小中设置 nuser_XXX 属性。第三,数组 mjData.userdata 不用于任何 MuJoCo 计算。用户可以在这里存储自定义计算的结果;请记住,所有随时间变化的内容都应存储在 mjData 中,而不是 mjModel 中。自定义文本字段可以保存在模型中。

机器人控制与仿真应用 1万+

【一看就会】Autoware.universe中静态绕障路线的生成逻辑

在路径行为规划中,前期根据地图和起点终点,生成了一组连续可行的路径段序列(lanelets),然后后续路径行为规划,又会进行起始点,终止点,避障绕障路径的路径规划,并且会调用route_handler中的函数,进行中心线生成,最后生成路径,后续再给速度行为规划进行速度规划。在autoware.universe的规划中,是基于规则的规划,而其中的规则又是为了解决不同场景的。而这些场景,大部分是为了解决路上障碍物(静态、动态、行人、车辆等等)。

weixin_48386130的博客 321

C++08 copy ctor

拷贝构造 在C++初始化一个变量 = 和()等价 就像 Howmany h2(10) 等价于 Howmany h2 = 10; 拷贝构造: 如果有一个构造函数,这个构造函数它的参数是自己那个class的一个 const reference, 这个构造函数就可以在做这种类型的初始化的时候被调用。(就是初始化这个对象的时候,用另外一个这个class的对象来初始化) 上面这样写是正确的,意味着在传参数过程中不会发生拷贝构造,因为并没有在这个函数里面制造出一个新的对象出来。只是把外面那个对象的refe

m0_46266264的博客 264

RoCEv2 (RDMA over Converged Ethernet) 技术详细介绍

本文深入解析RDMA over Converged Ethernet (RoCEv2)技术,该技术是AI时代算力网络的核心。文章从四个维度展开:首先阐述RDMA如何通过零拷贝和内核旁路解决传统网络的数据搬运瓶颈;接着拆解RoCEv2协议栈,对比其与InfiniBand和iWARP的特性差异;然后分析其在分布式AI训练、高性能存储等场景的关键价值;最后提供实战指南,强调无损网络配置、流量隔离和精细监控的重要性。RoCEv2虽能带来微秒级延迟和极低CPU开销,但需精心设计网络环境才能发挥最大效能。

技术引领业务创新 1389

Item 8 异常安全的ctor和dtor

根据下面的声明,写出实现的代码,要求达到异常安全或异常中立。这意味着即使发生了异常,Stack对象也要处于正确统一的状态。异常要被传递给调用者,让调用者根据上下文处理异常。template class Stack {public: Stack(); ~Stack(); /*...*/private: T* v_; // 栈的缓冲区 size

八戒的专栏 1642

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

ctor/dtor 与线程安全

ctor/dtor 与线程安全 当一个对象能被多个线程同时看到,那么对象的销毁时机就会变得模糊不清,可能出现多种竞态条件: 在即将析构一个对象时,从何而知是否有另外的线程正在执行该对象的成员函数? 如何保证在执行成员函数期间,对象不会在另一个线程被析构? 在调用某个对象的成员函数之前,如何得知这个对象还活着? 现在以 shared_ptr 一劳永逸地解决这些问题 线程安全的定义 依据《Java 并发编程实践》/《Java Concurrency in&nbsp

qq_41105501的博客 1252

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

侯捷 C++面向对象编程笔记——6 带指针的类:三大函数

编译器默认的拷贝构造赋值(一个bit一个bit的复制),编译器默认的只是拷贝了指针(浅拷贝),而不是指针指向的数据。编译器默认的拷贝构造赋值(一个bit一个bit的复制),编译器默认的只是拷贝了指针(浅拷贝),而不是指针指向的数据。alias(别名)和 memory leak(内存泄漏)都是十分危险的。alias(别名)和 memory leak(内存泄漏)都是十分危险的。了后,会使第三步出现问题## 6 带指针的类:三大函数。例:这里结束会调用三次 dtor。例:这里结束会调用三次 dtor。

PLUS_WAVE的博客 266

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

C++中的trivial和non-trivial构造/析构/拷贝/赋值函数及POD类型

POD 属性在 C++11 中往往又是构建其他 C++ 概念的基础,事实上,在 C++11 标准中,POD 出现的概率相当高。因此学习 C++,尤其是在 C++11 中,了解 POD 的概念是非常必要的。,也就是说有意义的函数,里面由一些必要的操作,比如类成员的初始化、释放内存等。POD 在 C++ 中是非常重要的一个概念,通常用于说明一个类型的属性,尤其是用户自定义类型的属性。一旦定义了构造函数,即使构造函数不包含参数,函数体里也没有任何的代码,那么该构造函数也不再是"平凡"的。

陌养的编程之路 544

Lua仿C++面向对象实现(LuaOO)

该实现的特性 支持类似C++的 new() 和 delete() 函数 构造(ctor)和析构(dtor)函数会自动按C++顺序调用(ctor从最底层基类开始调用,dtor从高上层派生类调用) 派生类中可以访问被覆盖的子类方法 实现代码 function class(super) local cls = {} if super then setm...

程书画的 BLOG 1080

C++ 知道禁用 copy-ctor/assign operator 是 C++ 程序员的试金石

陈硕优快云博客 :知道禁用 copy-ctor/assign operator 是 C++ 程序员的试金石 vgxpm的专栏 : 对其进行了解释,详细阅读 陈硕github/muduo : Singleton.h 的实现中对其对copy-ctor/assign operator进行禁用,利用继承noncopyable,代码: class Singleton : boost::noncopyable

时空矩阵 1758

C++之实现禁用 copy-ctor/assign operator

知道禁用 copy-ctor/assign operator 是 C++ 程序员的试金石。在看到一个开源项目时,先查看其 RAII handle class 是否禁用了 copy-ctor/assign operator(例如 Thread、Mutex、CondVar、Connection),如果没有,对其第一印象就很差了。     进行类体设计时,会发现某个类的对象是独一无二的,没有完全相同的

vgxpm的专栏 3163

C++基本功和 Design Pattern系列 ctor & dtor

最近实在是太忙了,无工夫写呀。只能慢慢来了。呵呵,今天Aear讲的是class.ctor 也就是constructor, 和  class.dtor, destructor. 相信大家都知道constructor 和 destructor是做什么用的,基本功能我就不废话了。下面先说效率的问题,让我们看个简单的例子:class SomeClass;   // forward declaratio

杨德龙的专栏 1万+

深度探索c++对象模型(5):ctor、dtor、copy

一、无继承的对象构造: 类中包含的都是POD,则该类的ctor、dtor、copy都是trivial,初始化、拷贝、回收该类型对象,编译器不会产生对应的ctor、dtor、copy。 二、加入虚函数: 由于构造函数需要初始化vptr,因此ctor、copy是nontrivial,dtor是trivial 在一个类B中使用了其他类A,并且该类有ctor、dtor、copy,则B的ctor、dtor、copy都是nontrivial。 三、虚拟继承: 由最底层的class对Point进行初始化 四、vpt

ehuangdan5864的博客 6663

Item 12 注意copy ctor和赋值函数

如果一个类有自定义的copy ctor和赋值函数,那么: ● 在向其添加成员变量的时候,也要向其所有的ctor和赋值函数添加变量的初始化 ● 派生的时候,也要调用基类相关的函数:class PriorityCustomer: public Customer { public: ... PriorityCustomer(const PriorityCustomer& rhs); PriorityCustomer& operator=(const PriorityCustomer& rhs);

八戒的专栏 774

C++: Ctor

// A: //    no default ctor//    with copy ctorclass A{public:     explicit A(int)    {}};//B://    no default ctor//    no ctor from int//    with copy ctorclass B: public A{};int main(){        //A ...

weixin_34198762的博客 410

copy constructor和copy assignment operator的区别

拷贝构造函数(copy constructor)被用来以一个对象来初始化同类型的另一个对象,拷贝赋值运算符(copy assignmentoperator)被用来将一个对象中的值拷贝到同类型的另一个对象中: class Widget { public:  Widget(); // default constructor  Widget(const Widget&amp; r...

晚晴小筑 377
上一篇: [Effective WX] wx的UI UnitTest explained
下一篇: [读书笔记] Inside C++ Object笔记(第4章: Function语意学)
zero_lee
博客等级 码龄21年 94粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值