![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++
c++进阶之路
HR_Reborn
这个作者很懒,什么都没留下…
展开
-
C++:类的内存分布
类中的所有方法(成员函数)都会放在代码区,所以类的大小一般只计算类中成员变量的对齐之后大小的综合(如果没有虚函数的时候,如果有虚函数则会在类的首地址中有一个虚函数指针,32位系统是4个字节。空类占用空间位1,类中没有任何的成员变量本应该是0,但是这个时候实例化多个对象,如果是0的话这些对象都不会再内存占用空间也没有地址,也不会将这些对象进行区分了,因此编译器会给空类隐含加一个字节,保证用此类定义的对象都有一个独一无二的地址。编译器所进行的一些特殊处理,比如空类的处理以及内存对齐的开销。原创 2024-05-29 15:57:17 · 201 阅读 · 0 评论 -
C++:Static
回想C++程序中内存的划分是什么呢?从上到下首先是内核空间,然后是栈内存,内存映射段,堆,数据段,和代码段。用一张图的解释就是:在这里主要探讨static,因此主要讨论数据段。数据段用于存储静态全局变量、静态局部变量和静态常量等静态数据,在程序运行期间,数据段的大小固定不变,但其内容可以被修改。按照变量是否被初始化,数据段可分为已初始化数据段和未初始化数据段。原创 2024-04-16 18:50:54 · 940 阅读 · 0 评论 -
C++:三大函数拷贝构造、拷贝复制和析构函数详解
编译器会给出默认的拷贝构造、拷贝赋值,但针对指针会有深拷贝浅拷贝的问题,会出现内存泄漏的风险。以String类实现为例。如果一个类中有指针成员,则必须有拷贝构造和拷贝赋值。因为编译器默认的赋值操作仅仅是浅拷贝。首先对上面BigThree来进行分析。原创 2023-06-24 23:18:55 · 514 阅读 · 0 评论 -
C++:重载
运算符重载本质上就是函数重载。这里举例子是定义三维数组。下面代码是进行简单的定义,输出分别是000和123。现在问题来了,如果要想两个vec3变量进行加减乘除运算,则需要对运算符进行重载,vec3相当于自定义类型。上述代码就是对运算符进行重载,最终可以实现直觉上的两个Vec3类型的相减。原创 2023-11-20 19:20:12 · 166 阅读 · 0 评论 -
C++:虚函数
如果释放父类指针指向子类对象的时候,析构函数不设置为虚函数就会只析构基类而不析构子类。会造成内存泄露。原创 2023-06-22 13:05:59 · 311 阅读 · 0 评论 -
C++结构体struct和共同体union的区别
使几个不同类型的变量共同占用一段内存。当共同体中存入新的数据后,原有的成员就失去了作用,新的数据被写到union的地址中。sizeof(union)是最长的数据成员的长度。对于union的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了, 而对于struct的不同成员赋值是互不影响的。把不同类型的数据组合成一个整体,自定义类型。struct每个成员都有自己独立的地址,sizeof(struct)是内存对齐后所有成员长度的加和。原创 2023-05-10 16:45:36 · 86 阅读 · 1 评论 -
右值引用详解
左值,lvalue,就是赋值符号左边的值,如a=5,a就是左值,但是准确的来说,左值是表达式(不一定是赋值表达式)后仍然存在的持久对象。右值,rvalue,右边的值,是指表达式结束就不存在的临时对象。纯右值,prvalue,传统意义上的右值。在介绍将亡值之前对左右和右值做个总结,有地址的变量就是左值,没有地址的字面值、临时值就是右值。将亡值,xvalue,是C++11为了引入右值引用而提出的概念,与纯右值的不同点在于,将亡值是即将被销毁、却能够被移动的值。原创 2023-04-25 15:50:29 · 2732 阅读 · 0 评论 -
C++内存管理
堆是C++中用来存储动态分配内存的内存分区,堆内存的分配和释放需要手动管理,可以通过new/delete或malloc/free等函数进行分配和释放。前面例子中的本地变量是简单类型,在C++中成为POD类型,对于带有构造和析构函数的非POD类型变量,栈上的内存分配同样有效,编译器会在合适的时机,插入对构造函数和析构函数的调用。由于代码区是只读的,所以会被多个进程共享,在多个进程同时执行同一个程序时,操作系统只需要将代码段加载到内存中一次,然后让多个进程共享这个内存区域即可。值得一提的是,上面的。原创 2023-05-08 16:21:34 · 689 阅读 · 0 评论 -
opengldemo学习
learnopengl demo原创 2022-08-18 09:41:34 · 317 阅读 · 0 评论 -
Vector去除重复元素
看到一个比较经典的算法,利用set自动去重的机制//定义并初始化一个vectorvector<int> vec(10,1); //vec里有10个值为1的元素set<int>s(vec.begin(), vec.end());vec.assign(s.begin(), s.end());//完成去重...原创 2022-03-28 11:03:04 · 3535 阅读 · 1 评论