C++_基础知识
C++_基础知识
HelloBugs88
这个作者很懒,什么都没留下…
展开
-
<九>Pimp设计习语
Pimp原创 2023-12-11 10:08:59 · 350 阅读 · 0 评论 -
<八>异常机制
• 只有特殊的硬实时系统对时间开销(异常抛出时),或者嵌入式系统对空间开销(代码膨胀)极度敏感时,才关闭异常(决策前测量)针对异常中立的函数(自己不抛,但调用的函数可能会抛),不要试图捕获所有异常,来实现noexcept。• C++11废弃了异常规约(列举函数可能抛出的异常),而采用noexcept表示是否抛出异常。• throw 抛出异常, try 包含可能抛异常的语句块,catch 语句捕获异常。• 异常不抛出时没有额外性能负担,只有抛出时才有(比错误码大)只有移动操作不抛出异常,才使用移动;原创 2023-12-05 17:19:58 · 398 阅读 · 0 评论 -
<七>C++项目中戒除C语言的“不良习惯”
• 当一定要用C 时,应使用C 和C++ 的公共子集,并将C 代码以C++ 来编译。• 辨析使用场景和对象所有权,谨慎使用裸指针。• 使用模板和编译时计算等替换C风格的宏机制。• 严格避免malloc() 和free()• 使用C++类型转换替换C风格的强制转换。• 尽量避免全局数据,谨慎使用全局函数。原创 2023-11-23 17:12:17 · 32 阅读 · 0 评论 -
<六>字符串最佳实践
C++字符串最佳实践原创 2023-11-23 17:09:38 · 28 阅读 · 0 评论 -
<五>数组最佳实践
•使用vector实现变长数组,替代堆上的C风格数组。•使用array实现定长数组,替代栈上的C风格数组。•不要使用指针传递数组,传递指针仅代表单个对象。•不要使用C风格数组承载多态对象(基类、子类)•不带长度信息,易错点:拷贝、传参、返回值。•尽量避免使用C风格数组,有很多安全隐患。•本质是指针指向的一块连续内存,引用语义。原创 2023-11-23 17:04:28 · 34 阅读 · 0 评论 -
<四>关于变量生命周期和初始化
• 统一初始化:int a1{100};• 基本数值类型,以及auto自动推断类型声明,可以继续使用赋值初。• 大多数情况推荐使用统一初始化,又叫列表初始化,特别是对象、• 和表达式周期一致,通常类似自动对象(绑定引用除外)• 全局变量,函数中的静态变量,类静态数据成员。• 自声明开始,到声明语句所在块结尾}释放。• 随线程创建而创建,随线程结束而释放。• 构造初始化:int a4(100);• 赋值初始化:int a3=100;• 程序启动后加载,程序结束释放。• 堆变量,自由存储对象。原创 2023-11-17 09:30:26 · 34 阅读 · 1 评论 -
<三>值语义与引用语义
• 值语义有很多好处:没有悬浮指针/引用,没有昂贵的释放操作,没有内存泄漏,没有数据竞争……但是值语义大对象拷贝代价高昂,不能支持虚函数多态,不能维持对象全局唯一性……• 引用语义:对象以指针或引用的方式间接存储,参数、返回值、拷贝传递的是指针或引用。不存在特权类型或限定(其他语言则不,这是C++的独特性之一)。• 值语义:对象以值的方式直接存储,传参、返回值、拷贝等。对内置类型和用户自定义类型提供同等支持。原创 2023-11-16 12:14:44 · 40 阅读 · 1 评论 -
<二>关于栈内存和堆内存
• 栈内存有大小限制,可能会溢出,例如Linux默认为8MB,Windows默认为1MB。• 堆内存有很高灵活性,虽性能较差,但可通过相关设施和编程技巧精细控。• 堆内存大小没有栈内存严格限制,与机器内存总量和进程寻址空间相关。• 如果生存周期短,拷贝较少(传参、返回值),栈内存性能更好。• 堆内存在长运行程序有内存碎片效应,小块空闲内存得不到重用。• 对象释放时,手动释放堆内存(delete/free)• 栈上对象线性分配,连续排列,没有内存碎片效应。• 栈内存分配快,布局连续,缓存友好,释放快。原创 2023-11-16 11:14:31 · 49 阅读 · 1 评论 -
<一>关于进程虚拟地址空间区域内存划分和布局
在上面给出的进程地址空间经典布局图中,共享库的装载地址为0x40000000,这实际上是Linux kernel 2.6版本之前的情况了,在2.6版本里,共享库的装载地址已经被挪到靠近栈的位置,即位于0xBFxxxxxx附近,因此,此时的堆范围就不会被共享库分割成2个“碎片”,故kernel 2.6的32位Linux系统中,malloc申请的最大内存理论值在2.9GB左右。泄漏的内存往往比忘记释放的数据结构更大,因为所分配的内存通常会圆整为下个大于申请数量的2的幂次(如申请212B,会圆整为256B)。原创 2023-11-16 11:11:41 · 68 阅读 · 1 评论