
C/C++
沉迷WebRTC
想在音视频实时通信行业一直深耕下去的女孩,请多多包涵。
展开
-
ubuntu下安装Gtest和测试
1、获取gtest源码sudo apt-get install libgtest-dev随后进入/usr/src/进入 cd /usr/src/gtestmkdirbuildcdbuildcmake ..make按照命令执行后,可以看到有静态库生成:将编译生成好的库拷贝到系统目录下:sudo cp libgtest*.a /usr/local/lib...原创 2021-09-02 18:47:10 · 7919 阅读 · 4 评论 -
C++11新特性
1、C++11 中的 override 关键字在派生类的成员函数中使用override时,(1)如果基类中无此函数,或基类中的函数并不是虚函数,编译器会给出相关错误信息。(2)显式的在派生类中声明时,哪些成员函数需要被重写,如果没被重写,则编译器会报错。2、基于范围的 for 循环std::vector<int> arr(5, 100);for(std::vector<int>::iterator iter = arr.begin(); iter != arr.end原创 2021-08-28 15:58:26 · 215 阅读 · 0 评论 -
C++类里面定义一个指向自己的静态成员指针变量(实现单例)
1、使用方法我们在头文件中声明一个如下的类,定义一个指向该类自己的静态成员指针变量kpHttpClientInstance;class CHttpClient{public: CHttpClient(); ~CHttpClient(); static CHttpClient* GetInstance(); int Init(const string...原创 2018-11-26 18:17:39 · 7198 阅读 · 1 评论 -
使用dlopen动态链接库的一个问题
当我们采用异步事件驱动模型,保证主程序逻辑不变,将各个业务用动态链接库的形式加载进来,这就是所谓的插件。linux和Windows提供了加载和处理动态链接库的系统调用,非常方便。该文章记录一个在使用过程中的问题。1、LinuxLinux提供了一套API来动态装载库:dlopen,打开一个动态库,并为使用该库做些准备。dlsym,在打开的库中查找符号的值。dlclose,关闭库。dlerror,返回一个描述最后一次调用dlopen、dlsym,或dlclose的错误信息的字符串。原创 2020-12-16 13:53:08 · 1881 阅读 · 1 评论 -
Linux中判断一个目录是否存在,如果不存在就创建这个目录
在操作文件目录时我们常常会考虑如下的功能:1、判断文件是否存在,并判断文件是否可写/目录是否存在Linux下:#include<unistd.h>int access(const char* pathname, int mode);参数介绍:返回值:成功0,失败-1pathname 是文件的路径名+文件名mode:指定access的作用,取值如下:F_OK 值为0,判断文件是否存在 X_OK 值为1,判断对文件是可执行权限 W_OK 值为2,判断对文原创 2020-11-12 11:04:28 · 7598 阅读 · 2 评论 -
C++获取URL中主机域名
std::string SplitHostDomain(const std::string& str) { if (!!str.compare(0,5,"http:")) { size_t found = str.find_first_of("/\\"); std::string str1 = str.substr(found + ...原创 2019-09-25 17:56:23 · 2013 阅读 · 0 评论 -
最好用的Hash
uint32_t hashCode(const char * guid){ const char *keys = guid; uint32_t hash = 0; uint32_t size = strlen(keys); for (uint32_t i = 0; i < size; i++) { hash += (uint32_t)keys[i]; hash +=...原创 2019-03-29 20:31:28 · 323 阅读 · 0 评论 -
C++设计技巧(一)之两个类互相拥有对方的对象指针
1、在实际的运用中我们也会用到如下的类关系:class B;class A{int i;B *lpb;}class B{int i;A* lpa;}注意:一般来说,两者的定义,至少有一方是使用指针,或两者都使用指针,但是决不能两者都定义实体对象。这样的实现,通俗地来说是 “你中有我,我中有你 ”,那么在具体运用时,我们可以将两个类所实现的含义联系起来,比如我们...原创 2018-11-22 21:40:39 · 2178 阅读 · 0 评论 -
C函数:文件移动、复制、重命名和删除
1、要实现一个目录下的文件被移动到另外的目录Windows API :BOOL WINAPI MoveFile( _In_ LPCTSTR lpExistingFileName, _In_ LPCTSTR lpNewFileName); 功能:Moves an existing file or a directory, including its children跨平台 C函数: #in...原创 2018-06-13 19:46:51 · 8975 阅读 · 0 评论 -
C++中引用计数、AddRef、Release
AddRef和Release实现的是一种名为引用计数的内存管理技术,这种技术是使组件能够自己将自己删除的最简单同时也是效率最高的方法。COM组件将维护一个称作是引用计数的数值。当客户虫组件取得一个接口时,此数值增1,当客户使用完某个接口后,此数值将减1。当此数值为0时,组件即可将自己从内存中删除。为正确的使用引用计数,需要了解一下三条规则:(1) 在返回之前调用AddRef。对于哪些返...转载 2018-06-21 13:52:37 · 3688 阅读 · 0 评论 -
ISO8601和UTC 时间,由秒数转化日期时间,日期到秒数
ISO8601和UTC 时间,由秒数转化日期时间,日期到秒数ISO8601时间格式:2018-6-5T17:46:50ZUTC时间格式: 2018-06-05T03:46:50+08:00 等同于2018-6-5T11:46:50ZUTC+时区= localtime;其中"T"用来分割日期和时间,时间后面跟着的"-07:00"表示西七区,"+08:00"表示东八区。时区默认是...原创 2018-06-05 17:50:30 · 7630 阅读 · 0 评论 -
C++编程思想之迭代器
编程思想之迭代器什么是迭代器?迭代器(Iterator)是按照一定的顺序对一个或多个容器中的元素从前往遍历的一种机制,比如for循环就是一种最简单的迭代器,对一个数组的遍历也是一种的迭代遍历的过程。GOF给出的定义为:提供一种方法访问一个容器(Container)对象中各个元素,而又不需暴露该对象的内部细节。迭代器有时也称为枚举器(Enumerator),其结构图如下:迭代器结构图 迭代器其实就是维转载 2017-08-31 11:54:10 · 832 阅读 · 0 评论 -
C++编程思想之回调函数
C++编程思想之回调函数在软件模块调用中,主要有三种机制:同步调用,异步调用和回调。同步调用是调用方(A)call被调用方(B)的接口,并等待B处理完给出一个回执后A才继续执行,这期间是“阻塞”的。异步调用是调用方(A)call被调用方(B)的接口后,不等待B执行完,且B在被调用后会直接回执A。回调是调用方(A)call被调用方(B)时,B也回调(callback)被调用方,双方互原创 2017-08-31 11:45:58 · 438 阅读 · 0 评论 -
堆和栈的区别
一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两回事,分配方转载 2017-08-11 16:38:57 · 266 阅读 · 0 评论 -
starUML使用以及出现connect elements exactly的解决办法
starUML使用以及出现connect elements exactly的解决办法1、使用过程(1)打开StarUML软件,界面如下。选择“Empty Project”,单击OK。(2)右键单击界面中的“Untitled”,选择"Add"》“Model”,命名为Model1。(3)右键单击model1,选择“Add Diagram”》“ClassDiagr原创 2017-07-21 09:33:02 · 8162 阅读 · 0 评论