
C++
文章平均质量分 75
一条叫做nemo的鱼
一枚孜孜不倦上下求索的程序员。主要关注领域:c/c ,数据结构算法,嵌入式,数据库,linux kernel.设计模式,lock free编程,异步IO.架构设计
展开
-
一文讲清 C++ CRTP(Curiously Recurring Template Pattern,奇异递归模板模式)
特性动态多态(虚函数)静态多态(CRTP)实现方式虚函数表 + 运行时间接调用模板继承 + 编译期绑定内存开销每个对象需存储vptr(通常8字节)无额外内存开销性能函数调用需查表跳转(轻微性能损耗)直接调用(无额外开销)灵活性支持运行时多态仅支持编译期多态代码扩展性新增派生类无需修改基类需修改模板参数或继承关系汇编特征虚表结构、vptr初始化、间接调用(call rdx直接函数调用(原创 2025-03-21 19:11:11 · 314 阅读 · 0 评论 -
thread_local的工作原理剖析
C++ thread_local原创 2024-08-25 23:45:47 · 380 阅读 · 1 评论 -
More Effective C++条款10:在constructors内阻止资源泄露
想像你正在开发一个多媒体通信薄软件,这个软件可以放置包括人名, 地址,电话号码等文字,以及一张个人相片和一段个人声音。为了简单起见,本文中假设只包含个人相片和声音。代码实现下:#include <stdio.h>#include <iostream>using namespace std;class Image{public: Image(const string& imageDataFileName) { printf("Image constr原创 2022-04-07 00:47:03 · 764 阅读 · 0 评论 -
More Effective C++条款9:利用destructors避免泄露资源
1C++为什么要引入exception?因为exception无法被忽略。如果一个函数利用“设定状态变量”的方式或是利用“返回错误码”的方式发出一个异常信号,无法保证此函数的调用者会检查那个变量或检验那个错误码(特别是当需要判断返回值的地方特别多的时候,很难每一次调用都去判断一下返回值,并且如果每次调用都去判断返回值的话,会让代码显得啰嗦)。于是程序的执行可能会一直继续下云,远设错误发生地点。但是如果函数以抛出exception的方式发出异常信号,而该exception未被捕捉,程序的执行便会立该中止。原创 2022-04-05 21:37:06 · 1190 阅读 · 0 评论 -
C++11bind总结
bind函数的使用详解可以将bind函数看作是一个通用的函数适配器,它接受一个可调用对象,生成一个新的可调用对象来“适应”原对象的参数列表。调用bind的一般形式:auto newCallable = bind(callable,arg_list);`其中,newCallable本身是一个可调用对象,arg_list是一个逗号分隔的参数列表,对应给定的callable的参数。即,当我们调用newCallable时,newCallable会调用callable,并传给它arg_list中的参数。原创 2022-03-28 00:25:38 · 417 阅读 · 0 评论 -
数据构结之数组总结
数据构结之数组总结原创 2022-03-16 22:09:09 · 390 阅读 · 0 评论 -
C++11移动语义解析
C++11移动语义解读原创 2022-03-14 23:02:10 · 1875 阅读 · 0 评论 -
疑难杂症之malloc死锁__lll_lock_wait_private
查看glibc源码可知, malloc内部是有锁的。那说明malloc是一个线程安全型函数,但是它不是一个可重入函数。重入的意思是,比如当前线程正在做malloc, 如果此时因为某种原因触发了信号,那么操作系统会保存好现场(正在执行的malloc),转而去执行信号处理函数,如果信号处理函数里面又有malloc的调用,那么此时就发生了malloc重入。当malloc重入时,可能导致线程死锁。main.c 如下:#include <stdio.h>#include <signal.原创 2021-10-19 00:45:53 · 6907 阅读 · 2 评论 -
C++引用的本质
C++中引用的本质即是指针. 当申明一个指向其它变量的引用时, 比如int b = &a,编译器偷偷地创建了一个变量,该变量会存储其引用的对象(a)的指针。并且一切对变量b操作,都变转变为对a指针的操作。然而编译器屏蔽了这一切,让使用者感觉一切都是“免费”的。#include <stdio.h>int main(){ int a = 10; int &b = a; int *c = &b; b = 11; retur.原创 2021-09-02 00:20:29 · 1127 阅读 · 0 评论 -
C++中的new和delete
扒一扒C++中各种不同的new和delete前言:众所周知,C++中的操作符new和delete是用来动态分配内存初始化对象和手动回收内存析构对象的。但这只是最基本最常用的用法。new和delete其实还有更内涵的东西。1 区分各种不同的newnew操作符其实分为三种:new operator ,operator new ,以及placement new。1.1 new ope原创 2012-09-02 23:08:24 · 300 阅读 · 0 评论 -
More effective C++笔记(1)----隐式转换与临时变量
(1)隐式转换发生的时机:当传递给操作符或者函数的参数与指定类型不匹配时,编译器将会“偷偷地”进行转换,此时就是发生了隐式转换。 (2)隐式转换发生的条件: (a)编译器原来就支持地转换:比如float型向int型转换,子类的对象(指针)向父类的对角(指针)转换,非const对象(指针)向const对象(指针)转换等等。 (b)当有类型转换操作符的时候。如果类型匹配原创 2012-05-28 22:38:44 · 496 阅读 · 0 评论