C++
文章平均质量分 74
Jxiepc
一个努力向上的男同志
展开
-
【C++编程调试秘籍】| 总结归纳要点
当使用一个函数来获取一个指针时,可能会出现的潜在错误,避免对象的所有权不明确等原因,让函数返回一个智能指针;比较有实质性的做法可能就是在析构中对类中资源的释放,但该做法可能交给智能指针去处理并不需要交给我们手动处理;当我们试图解引用NULL指针时,将会导致程序崩溃,为此以下提供一种不删除它所指向对象的半智能指针;如:打开一个文件不存在或没有权限,或访问链接不可用等,为运行时错误;的情况,则会返回错误的信息;该类型的指针销毁时刻为最后消亡的那个对它进行删除;为此,我们需要输出错误信息:输出错误的。原创 2023-01-03 11:42:54 · 684 阅读 · 0 评论 -
函数执行时堆栈的详细过程
函数调用时堆栈的过程原创 2022-10-18 13:02:08 · 384 阅读 · 0 评论 -
【程序员的自我修养】|【02】编译链接过程、目标文件解析
【注意】:以下情况下static变量一个在.data段一个在.bss段;,可能是一段子程序的起始地址,也可以是变量的起始地址;【段的标志位】:该段在进程虚拟地址空间中的属性;【如何将二进制文件作为目标文件中的一个段】保存段表中字符串常量;原创 2022-10-16 22:36:51 · 827 阅读 · 0 评论 -
【程序员的自我修养】| 【01】操作系统简介
提供抽象的接口,管理硬件资源;可以通过CPU、内存和I/O设备来挖掘操作系统的潜力;原创 2022-10-13 22:13:50 · 458 阅读 · 0 评论 -
【C++】| Linux下文件、文件夹、临时文件、缓冲区等操作函数归纳大全
文件操作概述磁盘文件和设备文件。磁盘文件:指一组相关数据的有序集合,通常存储在外部介质(如磁盘)上,使用时才调入内存。设备文件:在操作系统中把每- 一个与主机相连的输入、输出设备看作是一个文件,把它们的输入、输出等同于对磁盘文件的读和写。磁盘文件的分类计算机的存储在物理上是二进制的,所以物理上所有的磁盘文件本质上都是一样的:以字节为单位进行顺序存储。从用户或操作系统使用的角度份为:文本文件:基于字符编码的文件;二进制文件:基于值编码的文件。文本文件和二进制文件文本文原创 2021-05-09 21:06:32 · 1064 阅读 · 2 评论 -
【C++】| 简易实现一个ini配置文件解析器
ini文件是Initialization File的缩写,即初始化文件,是windows的系统配置文件所采用的存储格式;- 后缀名也不一定是".ini"也可以是".cfg",".conf ”或者是".txt";原创 2022-08-11 22:53:16 · 511 阅读 · 0 评论 -
【C++】| 如何更好的利用do……while(0)
如果你有一个复杂的函数且你不想要创建新的函数,那么使用do{...}while(0),你可以将一些代码放在这里面并定义一些变量,这样你就不必担心do{...}while(0)外面的变量名是否与do{...}while(0)里面的变量名相同造成重复了。...原创 2022-07-25 14:27:00 · 281 阅读 · 0 评论 -
【C++】| 如何用好#define
格式宏在编译前的处理过程2.5 取消宏定义2.6 可变参数宏 …和__VA_ARGS__原创 2022-07-22 11:21:35 · 2465 阅读 · 0 评论 -
【案例】| C++实现STMP发送邮件
2、工作流程3、常用指令4、SMTP响应码211System status, or system help reply214Help message220 Service ready221 Service closing transmission channel235Authentication successful250Requested mail action okay, completed25...原创 2022-07-06 10:37:50 · 979 阅读 · 0 评论 -
【gdb调试工具】| 如何在多线程、多进程以及正在运行的程序下调试
2、生成core文件测试源码3、调式正在运行的程序测试程序4、调试多进程程序测试程序5、调试多线程程序原创 2022-06-24 00:03:10 · 1711 阅读 · 0 评论 -
C++【对象模型】| 【09】类模板、异常处理及执行期类型识别
文章目录1、C++语言扩充性质1.1 Template异常处理(Exception Handling)EH简介对EH的支持执行期类型识别保证安全的向下转换操作dynamic_cast1、C++语言扩充性质三种扩充性质将会影响C++对象:template、exception handing、runtime type identification;1.1 TemplateTemplate:该模板表达式将在编译时期而非执行期被评估,将给程序带来重大的效率提升;但同时也带来缺点,当与其像依赖的头文件,原创 2022-05-09 18:25:03 · 383 阅读 · 1 评论 -
C++【对象模型】| 【08】类在执行期会处理哪些事呢?
文章目录临时对象对象的构造和析构全局对象局部静态对象对象数组默认构造和数组new和delete运算符针对数组的new语意临时对象class Y {public: Y(); ~Y(); bool operator==(const Y&) const;};class X{public: X(); ~X(); operator Y() const; X getValue();};void test() { X xx; Y yy; if(yy == xx.getVal原创 2022-05-08 22:29:42 · 536 阅读 · 0 评论 -
C++【对象模型】| 【07】构造、析构、拷贝做了哪些事?
文章目录纯虚函数无继承下的对象构造抽象数据类型为继承做准备继承体系下的对象构造虚拟继承vptr初始化语意学纯虚函数当一个类如以下设计,有哪些地方需要改进class Abstract_base {public: virtual ~Abstract_base() = 0; virtual void interface() const = 0; virtual const char* mumble() const { return _mumble; }protected:原创 2022-05-07 23:05:43 · 407 阅读 · 0 评论 -
C++【对象模型】| 【06】类中各种函数的刨析
文章目录一、简介1、成员的各种调用方式nonstatic member functionsvirtual member functionsstatic member functionvirtual member functions多重继承下的virtual functions虚拟继承下的virtual functions一、简介成员函数分类:静态函数、非静态函数、虚函数;静态函数:不能为声明为const、没有this指针,不能直接存取非静态成员数据;非静态函数:内含一个this指针;虚函数:通过虚原创 2022-05-06 15:17:52 · 650 阅读 · 0 评论 -
C++【对象模型】 | 【05】类与类之间各种关系下对数据成员的存取、绑定、布局
文章目录1、类继承造成的负担data memberdata member的绑定data member的布局data member的存取静态数据成员非静态数据成员继承与data member将类凑成一对type/subtype常见错误多重继承1、类继承造成的负担class X {};class Y : public virtual X {};class Z : public virtual X {};class A : public Y, public Z {};int main(int arg原创 2022-05-04 19:44:39 · 599 阅读 · 0 评论 -
C++【对象模型】|【03】拷贝构造是如何工作的,何时才会用到呢?
文章目录一、拷贝构造函数1、何时使用到拷贝2、默认拷贝构造的工作3、编译器何时自动生成拷贝构造3.1 bitwise copy semantics3.2 不要bitwise copy semantics一、拷贝构造函数1、何时使用到拷贝拷贝分类:拷贝构造和拷贝赋值操作符- 拷贝构造:被初始化;- 拷贝赋值操作符:被指定;产生拷贝动作:- 当以一个对象的内容作为另一个对象的初值时;- 当对象被当作参数传递时;- 当函数返回一个对象时一般会导致一个临时类对象的产生;拷贝构造形式cla原创 2022-05-02 16:28:45 · 751 阅读 · 0 评论 -
C++【对象模型】|【02】构造函数何时才会被编译器自动生成?
文章目录一、默认构造函数1、何时默认构造函数会自动生成2、编译器合成有用的构造函数四种情况2.1 类中内含带有默认构造的类成员一、默认构造函数1、何时默认构造函数会自动生成当类没有提供默认构造时,如果编译器需要它,则将会为其添加上;如果是程序的需要,则需要我们手动为它添加;如何区分编译器需要还是程序需要当使用`foo f;`创建一个对象时,- 由于类中没有提供默认构造函数,编译器会自动为其生成使之能被创建成功;- 类中的数据成员初始化交给构造函数,当想要默认的构造函数能够初始化数据成员(a)原创 2022-04-29 17:14:12 · 771 阅读 · 0 评论 -
C++【对象模型】| 【01】简单了解C++对象模型的布局
文章目录1、class加上封装后的布局成本2、C++对象模式2.1 简单对象模型2.2 表格驱动对象模型2.3 C++对象模型2.4 对象模型如何影响程序2.5 struct与class的差异2.6 面向对象模型中的多态1、class加上封装后的布局成本C++在布局或存取时间上的额外负担是由virtual引起的; - 虚函数机制,支持一个有效率的执行期绑定; - 虚基类,有一个单一而被共享的实例;当然继承也会给该子类增加额外负担;2、C++对象模式在class中分为:数据成员:静态、非静态原创 2022-04-27 19:46:22 · 980 阅读 · 0 评论 -
C++【type traits】 | 基本使用
文章目录一、助手类1、integral_constant2、true_type和false_type二、主要类型特征1、主要类型类别is_array:是数组is_class:是非联合类is_enum:是枚举is_floating_point:是浮点数is_function:是函数is_integral:是不可分割的is_lvalue_reference:是左值引用is_member_function_pointer:是成员函数指针is_member_object_pointer:是成员对象指针is_poin原创 2022-04-18 21:32:46 · 1910 阅读 · 2 评论 -
C++ | 【06 杂项】More Effective C++
31、代理类1、实现二维数组二维数组的使用是[][],即我们可以通过重载[]操作符来实现;但C++中没有[][]操作符,故我们可以进行嵌套实现;#include <iostream>#include <assert.h>using namespace std;template<class T>class Array2D{public: struct Array1D{ Array1D(){} T& ope原创 2022-04-15 00:29:34 · 456 阅读 · 0 评论 -
C++ | 【05 技巧】More Effective C++
文章目录1、指针与引用的区别2、尽量使用C++风格的类型转换3、不要对数组使用多态5、避免无用的缺省构造函数6、谨慎定义类型转换函数7、自增、自减操作符8、不要重载`||`、`&&`和`,`9、理解各种不同含义的new和delete10、使用析构函数防止资源泄漏11、在构造函数中防止资源泄漏12、禁止异常信息传递到析构函数外13、理解抛出一个异常与传递一个参数或调用一个虚函数间的差异14、通过引用捕获异常15、审慎使用异常规格16、了解异常处理的系统开销17、牢记80 - 20准则18、考虑原创 2022-04-15 00:28:29 · 1281 阅读 · 0 评论 -
C++ | 【04 效率】More Effective C++
文章目录18、考虑使用lazy evalution18.1 引用计数18.2 区别对待读取和写入18.3 Lazy Ferching19、分期摊还期望的计算20、理解临时对象的来源21、协助完成返回值优化22、通过重载避免隐式类型转换23、考虑用运算符的赋值形式取代单独形式24、考虑变更程序库25、理解虚拟函数、多继承、虚基类、RTTI所需的代价18、考虑使用lazy evalution- 推迟计算到需要该结果;- 节省编译器做的事;18.1 引用计数除非你确实需要,否则不去为任何东西制造拷贝;原创 2022-04-15 00:25:00 · 896 阅读 · 0 评论 -
C++ | 【03 异常】More Effective C++
文章目录10、使用析构函数防止资源泄漏11、在构造函数中防止资源泄漏12、禁止异常信息传递到析构函数外13、理解抛出一个异常与传递一个参数或调用一个虚函数间的差异13.1 要求被作为异常抛出的对象必须被复制13.2 catch中参数传递方式13.3 异常匹配时可以进行类型转换14、通过引用捕获异常15、审慎使用异常规格16、了解异常处理的系统开销17、牢记80 - 20准则- 如果一个函数通过设置一个状态变量或返回错误代码来表示一个异常状态,若没办法保证函数调用者将一定检测变量或测试错误 代码,若程序继原创 2022-04-15 00:22:04 · 564 阅读 · 0 评论 -
C++ | 【02 运算符】More Effective C++
文章目录5、谨慎定义类型转换函数6、自增、自减操作符7、不要重载`||`、`&&`和`,`8、理解各种不同含义的new和delete5、谨慎定义类型转换函数C++ | 一文整理Effective C++ 55条款内容(全)第24、46条C++【类】 | 转换构造函数 &类型转换函数6、自增、自减操作符class UPInt {public: // ++i UPInt& operator++() { *this += 1; return *t原创 2022-04-15 00:19:40 · 322 阅读 · 0 评论 -
C++ | 【01 基础提议】More Effective C++
文章目录1、指针与引用的区别2、尽量使用C++风格的类型转换3、不要对数组使用多态4、避免无用的缺省构造函数1、指针与引用的区别C++ |【01】面向对象基础内容、引用、函数重载等…- 引用必须指向某些对象,不能使用空值,应被初始化;- 由于不能使用空值,则在使用时,不需要测试其合法性;- 引用初始化后,不能改变;- 重载操作符时一般使用引用;- 当你指向一个对象不改变其指向时,或重载操作符时,使用引用;2、尽量使用C++风格的类型转换C++ | 一文整理Effective C++ 55原创 2022-04-15 00:14:54 · 636 阅读 · 0 评论 -
C++【内存管理】| 【智能指针】动态内存管理
文章目录一、简介1、接口二、四种智能指针1、auto_ptr2、unique_ptr2.1 测试案例3、weak_ptr3.1 提供的成员函数3.2 应用场景4、shared_ptr一、简介是一种抽象类型,由类模板来实现,借由类别的析构函数来达到自动释放指针所指向的存储器或对象;支持自动、异常安全的对象生命周期管理;1、接口# 返回原指针T* get() const throw();# 返回指向托管对象的指针T& operator*() const throw();T*原创 2022-04-07 11:15:02 · 1845 阅读 · 0 评论 -
STL【容器】| 【11】unordered_map
文章目录一、unordered_map1、常用成员函数2、案例一、unordered_map无序映射是存储由key和映value组合形成的元素的关联容器,并且允许基于键快速检索单个元素素;采用哈希桶的数据结构;桶是内部哈希表中的一个槽,元素根据哈希函数计算的哈希值分配给该槽;桶的数量直接影响哈希表的负载因子——碰撞的概率;增加桶的数量时都会导致重新散列;template < class Key, // u原创 2022-04-06 00:07:00 · 623 阅读 · 0 评论 -
STL【容器】| 【11】map/multimap
文章目录一、map/multimap1、常用成员函数2、案例一、map/multimapmap是关联容器,它按照特定顺序存储由key和value组合形成的元素;键值通常用于对元素进行排序和唯一标识;template < class Key, // map::key_type class T, // map::mappe原创 2022-04-05 23:46:38 · 166 阅读 · 0 评论 -
C++ |【总结归纳三本书籍系列】一文透彻资源管理,动态内存分配【下】....
文章目录一、使用operator new/delete1、对operator进行重载的作用2、自定义operator new/delete(案例)3、如果创建管理内存池3.1 第一版使用3.2 第二版使用3.3 第三版使用2.3 使用动态内存的三大原因2.4 new_handle2.5 =delete与=default一、使用operator new/delete1、对operator进行重载的作用1)用来检测运用上的错误使用new可能出现的问题:若使用new,可能出现delete失败,而导致原创 2022-04-05 16:07:39 · 1705 阅读 · 0 评论 -
STL【容器】| 【09】unordered_set
文章目录一、unordered_set1、常用成员函数2、案例一、unordered_set无序集是以无特定顺序存储唯一元素的容器,并且允许根据它们的值快速检索单个元素;采用哈希桶的数据结构;桶是内部哈希表中的一个槽,元素根据哈希函数计算的哈希值分配给该槽;桶的数量直接影响哈希表的负载因子——碰撞的概率;增加桶的数量时都会导致重新散列;元素的也是key,唯一的标识;元素不能修改,只能删除和插入;访问元素的速度比set快;template < class Key,原创 2022-04-05 15:20:34 · 777 阅读 · 0 评论 -
STL【容器】| 【09】set/multiset
文章目录一、set1、常用成员函数2、案例一、set集合是按照特定顺序存储唯一元素的容器;一般使用红黑树来实现;用于查询居多;template < class T, // set::key_type/value_type class Compare = less<T>, // set::key_compare/value_compare class Alloc = al原创 2022-04-04 20:26:11 · 739 阅读 · 0 评论 -
STL【容器】| 【07】forward_list
文章目录一、forward_list1、常用成员函数2、案例一、forward_list单链表是序列容器,允许在序列中的任何位置进行恒定时间的插入和擦除操作;无法通过位置直接访问元素;1、常用成员函数resize():改变大小;max_size():最大元素个数;empty():判断是否为空;front():第一个元素;assign:将新内容分配给list,替换其当前内容,并相应地修改其大小;push_front():在队首插入elem;pop_front():删除队首元原创 2022-04-04 00:42:42 · 486 阅读 · 0 评论 -
C++【对象模型】| 虚函数表 & 多态如何调用虚函数
文章目录一、对象模型二、虚函数表1、虚函数C++ | 【03】类的【继承、多态、复合、委托】一、对象模型二、虚函数表当改类中存在虚函数或其基类含有虚函数,编译器将会添加一个虚函数表vptr;1、虚函数一个函数在类中声明时,在头部加上virtual即被声明为虚函数;...原创 2022-04-03 00:21:01 · 765 阅读 · 0 评论 -
STL【容器】| 【06】priority_queue
文章目录一、priority_queue1.1 常用成员函数1.2 案例一、priority_queue优先级队列【大根堆】,第一个元素始终是其包含的最大元素;默认排序准则为less<T>;template <class T, class Container = vector<T>, class Compare = less<typename Container::value_type> > class priority_queue;原创 2022-04-01 22:08:19 · 180 阅读 · 0 评论 -
STL【容器】| 【05】queue
文章目录一、queue1.1 常用成员函数1.2 案例一、queue先进先出队列(FIFO),元素从尾部入队,从头部出队;template <class T, class Container = deque<T> > class queue;1.1 常用成员函数empty():是否为空;size():队列大小;front():对头元素;back():队尾元素;push():入队;emplace():入队;pop():出队;swap():交换队列;原创 2022-04-01 21:54:50 · 151 阅读 · 0 评论 -
STL【容器】| 【04】list
文章目录一、list1.1 几种创建方式1.2 常见成员函数1.3 insert、splice区别1.4 案例一、list双向链表是序列容器,允许在序列中的任何位置进行恒定时间的插入和删除操作,以及双向迭代;无法通过位置直接访问元素;删除、插入、移动性能好;template < class T, class Alloc = allocator<T> > class list;1.1 几种创建方式list<数据类型> l;list<数原创 2022-04-01 21:33:29 · 205 阅读 · 0 评论 -
C++【类】 | 转换构造函数 &类型转换函数
文章目录一、operator类型转换1、注意2、案例二、转换构造函数1、注意2、案例一、operator类型转换允许从类类型到其他类型的隐式转换或显式转换;没有参数或显式返回类型;operator 转换类型标识;隐式的使用类型转换函数;1、注意转换类型标识,不允许出现[];转换到数组的指针的类型要求使用类型别名,typedef;转换类型标识都不能代表数组或函数类型;声明说明符序列可以使用并可包含除了类型说明符或static之外的任何说明符;可使用friend,但要求有限定名原创 2022-03-31 21:52:25 · 1063 阅读 · 0 评论 -
STL【容器】| 【03】deque
文章目录1、deque1.1 创建的几种方式1.2 常用成员函数1.3 案例1、deque双端队列,具有动态大小的序列容器;可在两端进行扩展或收缩;可随机访问,存储位置不连续;在中间插入、删除;template < class T, class Alloc = allocator<T> > class deque;1.1 创建的几种方式deque<数据类型> dq;deque<数据类型> dq(10):指定初始大小为10;原创 2022-03-31 20:19:22 · 205 阅读 · 0 评论 -
STL【容器】| 【02】Vector
文章目录1、vector1.1 常用成员函数1.2 案例1、vector动态数组,连续的存储位置存储具有相同数据类型的一组元素;使用偏移量随机访问元素;插入、删除元素较慢;空间能够动态变化,空间不够时,重新创建两倍大小的数组,将数据移动过去;template < class T, class Alloc = allocator<T> > class vector;1.1 常用成员函数empty():判断是否为空;size():返回当前实际元素个数;原创 2022-03-31 20:06:27 · 171 阅读 · 0 评论 -
STL【容器】 | 【01】Array
文章目录1、array1.1 常用成员函数1.2 案例1、array相当于数组,存储固定大小的具有相同数据类型的序列容器;元素存储在连续的内存位置,允许对元素随机访问;template < class T, size_t N > class array;1.1 常用成员函数empty():判断是否为空;size():返回当前实际元素个数;max_size():返回最大大小;[ ]:返回指定下标的元素;at:通过索引获取元素;front():获取第一个元素;原创 2022-03-31 19:58:57 · 224 阅读 · 0 评论