C++
文章平均质量分 56
历史五千年
母校-太原工业学院
展开
-
C++程序设计机制:RAII机制
1、背景C/C++程序开发中,管理堆上分配的内存容易出错,常见的就是内存泄漏。原则上,只要我们足够仔细,在每一次动态分配内存之后,使用完毕后,手动delete即可释放掉内存,可是这必然会加大我们的工作量以及项目的维护难度。2、RAII机制原理RAII,即Resource Acquisition Is Initialization,在初始化中获取资源。RAII机制,通过在栈上创建临时变量,这样临时变量就接管了堆上内存的控制权,当该临时变量声明周期结束时,则对应的堆上内存自然就被释放了。3、原创 2022-04-04 22:08:15 · 7058 阅读 · 2 评论 -
C++基类的析构函数为什么需要加上virtual关键字
C++中基类采用virtual虚析构函数是为了防止内存泄漏。具体地说,如果派生类中申请了内存空间,并在其析构函数中对这些内存空间进行释放。假设基类中采用的是非虚析构函数,当删除基类指针指向的派生类对象时就不会触发动态绑定,因而只会调用基类的析构函数,而不会调用派生类的析构函数。那么在这种情况下,派生类中申请的空间就得不到释放从而产生内存泄漏。所以,为了防止这种情况的发生,C++中基类的析构函数应采用virtual虚析构函数。...原创 2022-04-04 20:38:13 · 1529 阅读 · 0 评论 -
C++程序设计机制:pimpl机制
1、pimpl机制的作用pimpl(private implementation)其主要作用是解开类的使用接口和实现的耦合。关于耦合性:耦合性(Coupling),也叫耦合度,是对模块间关联程度的度量。耦合的强弱取决于模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。模块间联系越多,其耦合性越强,同时表明其独立性越差。软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准。划分模块的一个准则就是高内聚低原创 2022-04-03 22:20:40 · 1476 阅读 · 0 评论 -
C++字节对齐(地址对齐)
1、什么是字节对齐现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是,在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。说白了字节对齐,就是地址对齐,变量的存放不是一个挨着一个按照变量大小进行空间分配,而是按照一定的规则在指定的地址上给变量逐一分配空间。2、字节对齐的原因和作用各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型原创 2021-07-10 22:27:00 · 3363 阅读 · 3 评论 -
inet_pton和inet_ntop函数的使用
描述int inet_pton(int af, const char *src, void *dst);This function converts the character string src into a network address structure in the af address family, then copies the network address structure to dst. The af argument must be either AF_IN...原创 2020-11-10 18:07:22 · 2014 阅读 · 0 评论 -
struct hostent结构体的使用
结构体描述:/* Description of data base entry for a single host. */struct hostent{ char *h_name; /* 正式主机名 */ char **h_aliases; /* 主机别名 */ int h_addrtype; /* 主机地址类型(AF_INET for IPV4, AF_INET6 for IPV6 */ int h_length; /* 主机IP地址字节长度,对于IPv4是四字原创 2020-11-08 21:46:14 · 392 阅读 · 0 评论 -
C++虚析构函数和纯虚析构函数
1、为什么要使用虚析构函数我们知道析构函数是在对象生命周期结束时自动被调用,用来做一些清理工作(如释放句柄,释放堆内存等),防止出现内存泄漏。那怎么还有虚析构函数呢?使用虚析构函数的类一般是要作为基类,被其他类继承。通过把基类的析构函数声明为虚函数,就可以通过父类指针来释放子类对象,从而完成子类的一些清理工作,防止出现内存泄漏。案例1:基类析构函数为非虚函数//test.hclass Parent{public: Parent(); ~Parent原创 2020-07-05 10:31:05 · 2446 阅读 · 0 评论 -
C++虚函数和纯虚函数
1、什么是虚函数带有virtual关键字修饰的函数就是虚函数。class Test{public: void fun1();//普通函数 virtual void func2();//虚函数};2、为什么要使用虚函数引入虚函数,是为了使用多态的特性(通过父类指针调用子类重写的方法)。案例1:没有使用虚函数//animal.hclass Animal{public: void eat();//普通函数};class Cat : pu原创 2020-07-04 22:15:21 · 570 阅读 · 0 评论 -
MinGW-w64安装教程
技术支持添加链接描述[点我获取技术支持]1. 什么是 MinGW-w64MinGW 的全称是:Minimalist GNU on Windows 。它实际上是将经典的开源 C语言 编译器 GCC 移植到了 Windows 平台下,并且包含了 Win32API ,因此可以将源代码编译为可在 Windows 中运行的可执行程序。而且还可以使用一些 Windows 不具备的,Linux平台下的开发...原创 2020-03-22 18:26:00 · 7920 阅读 · 1 评论 -
C++构造函数前加上explicit关键字的作用
在构造函数前加上explicit关键字,表示该构造函数只能被显示调用,不能被隐式调用。构造函数显示调用场景:T t1(value);//定义对象的同时,通过圆括号给出初值,显示调用构造函数构造函数隐式调用场景:T t1=value;//定义对象的同时,通过等号给出初值,会隐式调用构造函数fun(value);//函数传参,如果形参为类类型,会隐式调用构造函数...原创 2020-03-13 16:33:40 · 2149 阅读 · 0 评论 -
C++标准库std::list按下标删除元素算法实现
1、场景假设有一个数组[5,8,9,2,4,6],现在我想删除下标为1,3,4的元素,即把元素[8,2,4]删除。要求使用C++ 标准模板库 list实现(删除元素list比vector效率高)。2、分析经查阅资料,发现C++ 模板类list删除元素只有一个erase方法。iterator erase (iterator position);iterator erase (...原创 2019-10-30 18:49:39 · 4822 阅读 · 1 评论 -
使用QT库QSettings读取INI文件
1、INI文件样式[SYSTEM]ITEM_COUNT=3[ITEM1]NAME=AAAVALUE=111[ITEM2]NAME=BBBVALUE=222[ITEM3]NAME=CCCVALUE=333,444,5552、代码实现config.h#ifndef CONFIG_H#define CONFIG_H#include <QString&g...原创 2019-08-16 17:37:35 · 559 阅读 · 0 评论 -
循环队列实现
1、使用背景假设有N个数据采集线程负责采集数据,有1个入库线程负责往数据库写数据,由于采集线程和入库线程是异步的,所以中间需要一个缓存区来作为采集线程和入库线程之间通信的桥梁,所以引入了循环队列。2、N:1型场景假设有N个采集线程,1个入库线程,架构图如下:注意:(1)由于采集线程入队时,操作的是队尾,有N个线程同时操作队尾,所以需要对这N个采集线程上锁(任何时刻只有一个采...原创 2019-08-06 11:24:06 · 203 阅读 · 1 评论 -
QDialog的封装实现自定义选择对话框
效果图:注意事项:1、该窗体是通过封装QDialog类实现的2、提供了两个对外的接口批量增加item 返回用户选择的item3、该窗体提供查找、选择功能4、该窗体类关闭时只是单纯的隐藏,没有释放内存(需要注意)代码:wpselectdialog.h:#ifndef WPSELECTDIALOG_H#define WPSELECTDIALOG_H...原创 2019-06-28 17:55:41 · 1048 阅读 · 2 评论 -
套接字编程---多路IO转接---epoll实现代码
#include <sys/types.h>#include <sys/socket.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <arpa/inet.h>#include <sys/epoll.h>#inclu原创 2019-02-11 19:29:19 · 180 阅读 · 0 评论 -
套接字编程---多路IO转接---poll实现代码
#include &lt;sys/types.h&gt;#include &lt;sys/socket.h&gt;#include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;#include &lt;string.h&gt;#include &lt;arpa/inet.h&原创 2019-02-11 11:53:05 · 217 阅读 · 0 评论 -
c/c++获取系统时间实现,windows和linux通用
1.背景我们在编程中,经常会使用系统的向前时间,所以这里将实现方法总结了下,方便后续快速查看。2.使用到的C标准库函数(1)timeNAMEtime - get time in secondsSYNOPSIS#include <time.h> time_t time(time_t *t);DESCRIPTIONtime() returns the time s...原创 2019-01-08 21:26:42 · 1395 阅读 · 0 评论 -
windows下c/c++编程GBK、UTF8、UNICODE字符集互转详解
简介windows下进行C/C++编程时,需要处理各种各样的网络数据、文本数据,由于数据编码可能不一样,这时就需要对数据进行转码,否则程序将无法正常工作。常用的数据编码有GBK(GB2312)、UTF-8、UNICODE,具体的字符集相关知识我会单独写一篇文档进行描述,下面列出这三种字符集相互之间互转的封装函数。头文件这里使用了windows的两个库函数MultiByteToWideCha...原创 2018-09-27 15:30:53 · 7001 阅读 · 0 评论