标准C++ 11
Coder.Z
这个作者很懒,什么都没留下…
展开
-
记c++坑:7.记一次由智能指针导致的内存泄漏问题解决
目录项目背景问题产生项目背景我们的主要产品是一个针对个人用户的c/s,b/s混合架构的应用,为了对我们产品的一些新功能调试,压力测试,以及对线上服务的监控,我使用c++开发了一个机器人程序。这个程序中90%的设计和代码由我完成,除了其中的一个基于udp通信的库,使用了enet,然而这个库在之前不可追溯的几任维护者手中,将其代码进行了修改,居然在里面掺杂了tcp通信的功能!这完全违背了设计模式的...原创 2019-11-20 16:56:37 · 973 阅读 · 0 评论 -
linux c++获取进程的实时内存使用和cpu占用
看起来很简单的问题,本来想在网上找一个,找了一圈没有一个简洁合适的,遂自己写一个,部分代码copy自网帖并稍加改造。头文件:#ifndef _UTILITY_RESOURCE_0EFC332C_91AC_4126_9BAB_F32C12AAD376_H__#define _UTILITY_RESOURCE_0EFC332C_91AC_4126_9BAB_F32C12AAD376_H__...原创 2019-10-08 16:34:25 · 2817 阅读 · 0 评论 -
记C++坑:6.正则标准库regex不同平台行为不一致
代码如下:#include <string>#include <iostream>#include <regex>#define REG "hello(, |)"int main(){ std::string s1 = "#hello, hello#"; std::string s2 = std::regex_replace(s1, st...原创 2019-01-02 16:11:22 · 673 阅读 · 0 评论 -
c++如何构造一个递增的vector数组
原生数组和vector、array都不支持构造一个递增的数组,比如一个包含0~999的size为1000的数组。传统的方式是:int ids[COUNT] = {};for (int i = 0; i < COUNT; ++i){ ids[i] = i;}或std::vector<int> ids;ids.resize(COUNT);for (i...原创 2018-09-27 10:43:42 · 7392 阅读 · 6 评论 -
记C++坑:5.默认的隐式类型转换
最近排查解决一个项目中的性能问题,发现在一个工作线程中有这么一段代码:uint64_t servive_loops = 0;while(true){ // 业务逻辑代码 if (servive_loops % 1000 == 0) // 标记-1 { RecodeServiceStatistics(m_statistics); } ...原创 2018-09-20 20:51:38 · 498 阅读 · 0 评论 -
对C++锁的一些思考
C++中的多线程编程是一个相对复杂,坑比较多,并且出现问题较难排查的一个编程领域,也是c++编写大型项目中避不开的部分。加锁的方式有很多,应用场景也各都稍有不同,根据不同维度(或者侧重点,比如是原子化操作还是通知,技术属于乐观锁还是悲观锁,内核级别还是用户级别,linux平台还是win平台)可以分成很多类别,但其作用都是服务于多线程程序的稳定运行,所以一般都统称为“锁”。比如原子类型(使用场景如在...原创 2018-03-05 16:17:03 · 3601 阅读 · 0 评论 -
c++11实现强类型缓存系统
提示: 此博客中代码不一定是最新,最新代码请参考:https://github.com/xj-zhu/ttl_cache开篇: 看到这篇文章,或许你会有以下疑问: 现在有各种开源的内存k-v缓存数据库,为啥要自己搞一个? 几点解释: 1. 这些k-v系统一般都比较重量级,当然相对于关系型数据库可能还好,但是相对于我的这个实现原创 2017-11-08 19:35:49 · 1548 阅读 · 0 评论 -
C++通过bind,lambda表达式等实现简单的异步函数调用模型
用C++写代码的时候,有很多的场景需要关注一种情况,就是当需要调用一个可能引起长时间阻塞的函数(例如阻塞式的io操作)。大家遇到这种情况,代码的写法一般是这样的:1.调用需要阻塞以等待操作Func完成的接口 -> 成功 调用 FcncDone这样的调用方式会导致线程阻塞,尤其是在主线程中,应该避免这样的调用方式,以免造成用户体验上的卡顿,转化为如下写法:2.使用异步的方式(创建线程原创 2017-06-13 15:57:17 · 4017 阅读 · 0 评论 -
c++11通过变参模板实现特殊的数据结构和算法
C++11中增加了变长模板参数,可以替代c语言中的...参数(比如printf系列函数)。c语言中的...参数使用va_list来解析,在运行时通过对char*指针的强转达到使用参数的目的,所以当传参类型和实际处理...参数的函数代码中要求的单数类型不一致时,会引起编译时期发现不了的问题,严重可能导致程序崩溃。 C++11中变长模板参数的语法就不多说了,最开始使用的时候总会觉得用法...原创 2017-11-17 16:20:05 · 622 阅读 · 0 评论 -
C++11必会技能
容器:std::array –定长数组,替代特定场景的std::vector使用std::array<int, 10> arr;长度为10的数组,不可扩容std::foword_list –单向链表,性能比std::list高,但是使用限制多,特定情形可使用std::unorderd_set/multiset/m...原创 2017-10-31 17:30:34 · 954 阅读 · 1 评论 -
C++实现记录类型内存分配方式的包装类,使对象(或原始类型)只能通过new的方式实例化
因为c++new的实现的特殊性(对于非POD类型,new完成之后自动调用对象的构造函数),但是new调用构造并不是在可以重载的new操作符中完成的,这部分的流程通过编程的手段没办法改变(至少以我目前的能力来说),所以想要简单的在new的某个阶段记录新生成的对象来自于new操作是没法做到的。现在提供一种略微复杂一点(其实也很简单)的方法来标记对象生成来自于new还是栈上申请。思路:1,将...原创 2017-09-15 14:17:43 · 580 阅读 · 0 评论 -
C++代码复用的方法
情景: 对不同的对象,要执行相同的逻辑操作。在C++中有哪些方法实现?解决方法: 1,模板,将不同的对象的类型作为模板参数。//例:int iarray[] = {2,6,4,8,3};std::sort(iarray,iarray+sizeof(iarray)/sizeof(iarray[0]));double farray[] = {2.0,6.0,4.0原创 2016-12-02 23:06:11 · 12661 阅读 · 1 评论 -
记C++坑:1.被自己坑了一次的全局变量使用
最近遇到一个问题,打算写一个小的测试程序来测试一下自己设计的算法方案。当时也没考虑就用了全局变量。当时的代码是这样写的:int intarray[] = {1,10,100,1000};int CreateArray(int* arrayname){ arrayname = new int[4]; memccpy(arrayname,intarray,sizeof原创 2016-12-15 10:24:31 · 2537 阅读 · 1 评论 -
RAII资源管理一定没问题吗?
#include #include #include class clsinfo{public: clsinfo(int idx) :m_idx_(idx) { std::cout << "begin(" << m_idx_ << ")."<<std::endl; } ~clsinfo() { std::cout << "end(" << m_idx_ << ")."原创 2017-01-19 15:46:27 · 403 阅读 · 0 评论 -
关于c++多态
下面这段代码:#include #include class parent{public: virtual void who() { std::cout<<"I am class Parent"<<std::endl; }};class son : public parent{public: virtual void who(原创 2016-01-12 09:47:32 · 278 阅读 · 0 评论 -
最简单的文件加解密算法
参考网帖。调用一次为加密,对已经加密的文件再调用一次为解密。#include #include bool EncodeDecodeFile(const char* sfilesrc, const char* sfiledst){ if(NULL == sfilesrc || NULL == sfiledst) { return false; } bool ret =转载 2016-09-13 11:51:04 · 1152 阅读 · 0 评论