
现代C++实践100
文章平均质量分 69
将C++11、14、17、20的新特性,用代码实践的方式记录下来,帮助同样在学习C++新特性的伙伴快速入门
CodeBowl
一个靓仔!
展开
-
std::thread创建线程,使用std::ref()传递类对象参数
stdref只是尝试模拟引用传递,并不能真正变成引用,在非模板情况下,stdref根本没法实现引用传递,只有模板自动推导类型时,ref能用包装类型reference_wrapper来代替原本会被识别的值类型,而reference_wrapper能隐式转换为被引用的值的引用类型。thread在使用类对象作为参数传递过程中,常常会出现多次拷贝构造的情况,理想中的情况是只需一次拷贝构造。stdref主要是考虑函数式编程(如stdbind)在使用时,是对参数直接拷贝,而不是引用。...原创 2022-07-24 14:59:00 · 1309 阅读 · 0 评论 -
智能指针不是解决内存泄漏的万能良药
背景最近在重构一个模块,模块中的接口有指针参数,我想把他改成智能指针,凡是接口要保持不变,就很难修改。接口类似func(int ** p1),不知道怎么用shared_ptr代表。**然后我就进行了一系列骚操作!从而也发现了智能指针的不当使用带来的内存泄漏和悬空指针的问题。内存泄漏内存泄漏(MemoryLeak)是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。悬空指针在C/C++等语言中,悬空指针(Dangl原创 2021-11-16 22:22:04 · 871 阅读 · 0 评论 -
终于有一篇小白能看懂的智能指针详解了!
C++只能指针详解为什么会出现智能指针?内存泄漏打破美好智能指针unique_ptr功能实验shared_ptr成员函数缺陷weak_ptr总结内容较多,建议收藏,以后复习为什么会出现智能指针?对于程序员来说,如果我不需要,或者我没那么需要,再或者说有替代品,我都不会再去实现一个新东西。废话,程序员哪里有勤快的!既然它被发明出来,一定是解决问题的!在之前,我愚昧的小白生涯中,见到复杂的指针,时常俩股战战,因为搞不懂什么值传递、地址传递、实参、形参、引用、一级指针、多级指针、数组指针、函数指原创 2021-09-05 10:25:03 · 745 阅读 · 11 评论 -
C++11新特性 :函数对象包装器
函数对象包装器std::functionstd::bind 和 std::placeholder总结std::function C++11 std::function 是一种通用、多态的函数封装,它的实例可以对任何可以调用的目标实体进 行存储、复制和调用操作,它也是对 C++ 中现有的可调用实体的一种类型安全的包裹(相对来说,函数 指针的调用不是类型安全的),换句话说,就是函数的容器。当我们有了函数的容器之后便能够更加方便 的将函数、函数指针作为对象进行处理。#include <functio原创 2021-09-04 16:52:12 · 308 阅读 · 0 评论 -
c++11新特性:变长参数模板详解
这里写目录标题C++11 变长参数模板变长函数参数包如何解参数包sizeof()获得函数参数个数递归模板函数变参模板展开结论C++11 变长参数模板在C++11之前,无论是类模板 还是函数模板,都只能按其指定的样子,接受一组固定数量的模板参数;这已经大大提升了代码的复用!在C++11之后,加入了新的表示方 法,允许任意个数、任意类别的模板参数,同时也不需要在定义时将参数的个数固定。更加像”黑魔法“了。template<typename... Ts> class Magic;模板类原创 2021-08-25 08:41:18 · 4905 阅读 · 0 评论 -
现代C++实战100练:初始化列表
在讲这个问题之前,我想先说下本文的风格,这也是我写作的风格,通常我不会像教科书一般上来就直说概念和道理,我喜欢用已知,大家可以理解的问题去引入一个知识,这是我自己的学习方法,也希望介绍给大家。同时你可以在文章开头,看到你将通过本文了解到什么,再决定去不去花费时间阅读,毕竟时间很宝贵。您可以通过本文了解到什么什么是初始化列表什么是POD类型C++11之后,对初始化列表做了什么改变建议您在以后的开发使用初始化列表,这将有一些帮助!C++11前的初始化列表在C++11之前,就有了初始化列表这个概念原创 2021-08-24 08:17:09 · 322 阅读 · 0 评论 -
现代c++实践:变量声明强化,竟然可以在if/switch中定义变量!
变量声明强化,竟然可以在if/switch中定义变量!c通过本文你可以了解if/switch 变量声明强化总结c通过本文你可以了解C++17新特性 变量声明强化在if/switch 中的变量声明强化if/switch 变量声明强化在传统 C++ 中,变量的声明虽然能够位于任何位置,甚至于 for 语句内能够声明一个临时变量 int,但始终没有办法在 if 和 switch 语句中声明一个临时的变量。例如:#include <iostream>#include <vector&原创 2021-08-23 08:33:12 · 2150 阅读 · 1 评论 -
现代C++实践100练:吃透C++新特性constexpr
在讲这个问题之前,我想先说下本文的风格,这也是我写作的风格,通常我不会像教科书一般上来就直说概念和道理,我喜欢用已知,大家可以理解的问题去引入一个知识,这是我自己的学习方法,也希望介绍给大家。例如本文,很多人可能不知道constexpr,也不知道为什么要引入它,但是大家都知道const,通过const引入,就往往容易接受的多。这里写目录标题本文你可以了解到什么constconstexpr:常量表达式constexpr定义函数编译期的优化性能实测使用总结参考资料本文你可以了解到什么了解constexp原创 2021-08-22 15:58:13 · 402 阅读 · 0 评论 -
现代C++实践100练:为什么使用nullptr代替NULL?因为它更加风骚
在讲这个问题之前,我想先说下本文的风格,这也是我写作的风格,通常我不会像教科书一般上来就直说概念和道理,我喜欢用已知,大家可以理解的问题去引入一个知识,这是我自己的学习方法,也希望介绍给大家。例如本文,很多人可能不知道nullptr,也不知道为什么要引入它,但是大家都知道NULL,通过NULL引入,就往往容易接受的多。本文你可以得到什么你可以知道一个极其好用没用难度的新特性 nullptr你可以知道为什么C++要用nullptr代替NULL你可以在以后的编程中使用更加风骚的nullptr(本文面原创 2021-08-20 22:42:06 · 652 阅读 · 0 评论