- 博客(6)
- 收藏
- 关注
原创 在项目中遇到的一些问题,来此记录
2) 如果构造函数是私有的,又用到了智能指针,请一定不要用 std::make_shared 或者 std::make_unique来促使化指针,而要用std::share_ptr(new T> 的方式来实现。找了一晚上也没找出原因,尝试过重新搭载项目,以失败告终,最后估摸着可能是mingw的编译环境出了问题,于是我重下了mingw,最终解决了这个问题。于是 我把构建出来的删了 并把.user也删了,问题得以解决,但是有时还会出现此问题,做法与之前一样,不知道该如何彻底避免此问题。
2024-06-22 13:30:19
1558
原创 深度探索C++对象模型 个人学习笔记之第四章 function 语意 4.1成员的各种调用方式
一般而言编译器会为成员的名称做出特殊处理,且一般会在在名称之前加入它属于哪个类,以提供独一无二的名字, 由于有函数重载的情况 这是远远不够的, 所以 还会在名称中加入参数列表类型的首字母 比如 一个函数有一个float参数 它属于 a类 名称为x 其名称就会 被转化为 af_x。静态成员函数不属于特定的对象,而是属于整个类。C++的设计标准就是对于非静态成员函数,我们要做到让它至少和一般的非成员函数有着相同的效率。C++在底层对于非静态成员函数的操作就是给它加入一个参数,这个参数为指向该类的实例对象。
2023-12-11 17:51:18
1302
1
原创 深入探索C++对象模型第三章节 data语义 3.4
多重继承以及单一继承但是基类没有虚函数 而派生类有虚函数的情况(图3.2b),在把一个派生类指定给一个基类的情况下,都需要编译器的介入, 因为它打破了第一继承的自然多态。为了执行这样的转型,需要额外的信息来在运行时检查对象的类型。首先 char 是一个字节 所以(char*)pv3d 地址就是一个字节 + 上point3d的字节 这样指针就指向了 pv3d里的 vertex子对象的部分。对象的指针,该对象包含有关类型的信息,如类型的名称。将这两种类用继承的关系连接起来,它的内存布局大概是这样的。
2023-12-06 19:04:07
1443
1
原创 深度探索C++对象模型 第三章data语意学 到3.3为止
C++标准中要求, 在同一个区域段(public, private, protected)中,members的排列,只要符合较晚出现的member放在较高的位置即可。出现在不同区域段 的 members的排列,以及虚函数指针在对象中的位置 排列由编译器决定。有些编译器还是会给Y与Z身上分配一个1byte的char 就如我用的vscode 一样, 也有些编译器,比如Visual C++ 他不会提供1Byte的内存。这个问题答案就是在虚拟继承的时候这两者是不同的,其他情况则是相同的。
2023-11-11 16:18:56
139
1
原创 深入探索C++对象模型第一章 关于对象 1.3对象的差异
ADT 是一个固定的单一类型实体,他在编译时期就定义好了,OO 是一个中他可能是一个未知实体,比如一个基类指针 他指向对象的模型不一定就是基类,也可能是其派生类,而ADT不可能发生这种歧义。观察图可知,继承而来的基类是放在最前面的低地址的(这也就是为什么 派生类可以转换为基类的原因),在32位的机器中一个指针占4word(字)那么一个指向ZooAinmal的指针是如何与一个整数指针或一个指向 template Array 的指针有所不同呢?1)固定的可用接口(找最匹配的函数)
2023-11-08 17:19:10
126
1
原创 深入c++对象模型的个人学习笔记-------第一章 关于对象 1.1c++对象模式
(1) C++ 使用封装后 的布局成本: 每个类的数据成员都会存储在每个对象中, 而每个类的成员函数则不是存储在每个对象中。每个非内联函数只会有一个函数实体, 而内联函数 会在你使用的地方产生一个实体。好处是:避免了成员不同类型而导致的需要不同的存储空间, 这个并没有被实际用于产品中 而是被 类成员指针 所应用。继承的底层:每一个类对象都内含一个bptr,指向一个基类表格(存放以它为基类的类的地址)。虚拟继承:就是两个类由一个类继承出来, 但是只会产生一个基类的实体。只需大概了解 以后再回来重看。
2023-11-07 16:43:39
144
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅