
c & c++
文章平均质量分 92
岁月斑驳7
好好学习,天天向上!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
使用 dlopen 和 dlsym 来使用 C++ 中的函数、类
1 问题简介正常情况下,dlopen 和 dlsym 是用来处理 C 库中的函数的,但对 C++ 来说,情况稍微复杂,如在 Android framework media 框架中加载 C++ 软解库组件时使用到 dlsym 来链接函数符号typedef SoftOMXComponent *(*CreateSoftOMXComponentFunc)( ...原创 2019-10-12 15:04:06 · 8039 阅读 · 0 评论 -
valist:解决变参问题
1. 概述va_list 是在 C 语言中引入解决变参问题的一组宏,变参问题是指参数的个数不定或者每个参数的类型不同。头文件:#include <stdarg.h>2. 使用步骤va_list 是一个字符指针类型,在代码中可以理解成当前参数集的指针,下面是几个与 va_list 相关常见的函数1. typedef char* va_list;2. ...原创 2018-08-03 11:56:43 · 4384 阅读 · 0 评论 -
c++11: 智能指针 shared_ptr & unique_ptr
一、背景1. 堆内存、栈内存、静态区内存我们知道,静态内存用来保存局部 static 对象、类 static 数据成员以及定义在函数之外的变量。而栈内存用来保存定义在函数内的非 static 对象。分配在静态区或栈内存中的对象由编译器自动创建和销毁,对于栈内存,仅在其定义的程序块运行时才存在,而 static 对象在使用之前分配,在程序结束时销毁。除了静态内存和栈内存,每个程序...原创 2018-08-29 17:16:18 · 2238 阅读 · 0 评论 -
c++:为什么要使用动态内存分配
实例化一个类有两种方式:// 假设有一个类A// 方式一:直接定义法A a;// 方式二:动态内存分配法A * a = new A();两者有什么差别呢? 实际上,方式二即等价于如下代码:A * a = new A();等价于A * a;a = new A();方式一就是直接将a放入栈区(局部变量,大小受限,自动释放); 方式二则是在堆区(动态内...转载 2018-08-29 14:59:45 · 7335 阅读 · 8 评论 -
c++:类拷贝控制 - 拷贝构造函数 & 拷贝赋值运算符
一、拷贝控制当定义一个类时,我们可以显式或隐式地指定此类型的对象拷贝、移动、赋值和销毁时做什么。一个类可以通过定义五种特殊的成员函数来控制这些操作,包括:++拷贝构造函数++、++拷贝赋值函数++、++移动构造函数++、++移动复制函数++和++析构函数++。我们称这些操作为拷贝控制操作。拷贝构造函数和移动构造函数定义了当用同类型的另一个对象初始化本对象时做什么。拷贝赋值运算符和移...原创 2018-08-31 18:21:06 · 760 阅读 · 0 评论 -
c++11:对象移动 & 右值引用 & 移动构造函数
一、概述c++ 11 新标准中最主要的特征是可以移动而非拷贝对象的能力。很多情况下,对象拷贝后就会立即被销毁。 在这些情况下,移动而非拷贝对象会大幅度提升性能。在旧 C++ 标准中,没有直接的方法移动对象。因此,即使不必要拷贝对象的情况下,我们也不得不拷贝。如果对象本身要求分配内存,进行不必要的拷贝代价非常高。类似的,在旧版本的标准库中,容器所保存的类型必须是可拷贝的,但在新标准中,我们...原创 2018-09-10 16:05:49 · 920 阅读 · 0 评论 -
do...while(0) 的妙用
在 C++ 中,有三种类型的循环语句:for、 while、 和 do…while, 但是在一般应用中作循环时, 我们可能用 for 和 while 要多一些,do…while 相对不受重视。但是,最近在读项目代码时,却发现了 do…while 的一些十分聪明的用法,不是用来做循环,而是用作其他来提高代码的健壮性。1. do…while(0) 消除 goto 语句通常,如果在一个函数中开始要...原创 2018-11-01 10:20:47 · 247 阅读 · 0 评论 -
c++: 内联函数
我们知道,函数封装调用有利于与代码的重复利用,因为我们可以函数起一个通俗易懂的名字,因此阅读和理解函数通常比读懂等价的条件表达式容易的多。然而函数相较于等价表达式运行速度要慢一些,因为在大多数机器上,一次函数调用意味着其实包含一系列的工作:调用前先保存寄存器,并在返回时恢复;可能需要拷贝实参;程序转向一个新的位置继续执行;内联函数的出现就是为了避免不必要的函数调用的开销,将函数定义为内联函数,...原创 2018-12-07 11:20:20 · 392 阅读 · 0 评论