C++11
文章平均质量分 81
重点C++11新特性讲解
BearPot
你太容易因为别人优秀而焦虑 你需要的是平静的把自己的事做好
展开
-
有关bind一些困惑解答
绑定成员函数时,需要传入成员函数的指针(或可调用对象)、成员函数所属的对象(或指向该对象的指针)、以及任何要为成员函数提供的参数。通过源码中的模板函数重载选择正确的实现,并返回创建的绑定对象。对于&a和a都是可以正确编译执行,结果正确,往常我总是用&a的写法,传的是指针进去,所以见到绑定成员函数,第二个参数传的是a,本身对象而感到困惑。(而不是对象的指针或引用),但这个代码仍然能够编译和运行,并且没有出现错误。的引用和修饰符,以便获得准确的函数类型。函数的参数可以接收对象和对象的指针(作为左值引用)原创 2023-07-29 11:11:58 · 219 阅读 · 0 评论 -
多线程下对象的析构问题
让判断线程是否结束,结束了线程join,给个bool类型stop用来判断所有线程走完没,走完了,修改析构函数让他为真,把线程对象至为空,当工作线程看到stop为真了,直接退出。程序崩溃--->在打印完毕之后,懒汉模式创建的单例对象已经被析构了,但是工作线程里的pm已经没有资源了工作线程就会奔溃。不过这么写针对这个用例来说能走,不过要是再加个funa线程函数,主线程一次走两个,走多个就会出现问题了。懒汉模式:需要的时候new一个对象,不需要的时候delete。懒汉模式,加锁,线程安全。原创 2022-12-24 21:45:09 · 1074 阅读 · 8 评论 -
bind绑定器里placeholders的一点认识
很多人在学c++11的时候学到可调用包装类function和绑定器bind的时候,bind里面很常见的所谓的占位符placeholders,就很迷惑占位?我给出我的理解,有大佬看到这个文章了觉得不对了,给我说说。代码注释看懂了,自己跑一遍就懂了~原创 2022-12-13 21:53:40 · 288 阅读 · 0 评论 -
有关enable_shared_from_this
解决在类的内部去返回一个指向当前对象的share_ptr,使得返回的这个share_ptr能够正常关联,使得引用计数正常+1;但是要用这个weak_ptr就需要一个shared_ptr去初始化这个weak_ptr。所以继承enable_shared_from_this这个类,去解决this问题就得先去构造share_ptr。(weak_ptr类型),每次shared_from_this都是拷贝构造内部的。enable_shared_from_this这个类的源码里面具有一个数据成员。原创 2022-12-12 23:21:57 · 235 阅读 · 0 评论 -
C++11 多线程编程
因为之前有学习过c11的并发库,最近在搞项目准备复习,本节开始就重温一下这块内容打算连着写上几篇博客去记录一下.. 在学习linux的时候肯定都接触过c语言里线程pthread,不过他并不好用,各种回调函数,句柄很多参数等等,相关的api也是一大堆,不过在c++11之后就提供了线程类叫做 std::thread,用起来就很简单了。说到线程,肯定就要考虑线程同步,线程安全的问题,同linux上一样,c++11也提供了pv原子操作,互斥(各种锁),条件变量,信号量,future(用来获取异步任务)等等这些去支持原创 2022-12-14 12:00:07 · 1828 阅读 · 11 评论 -
C++泛型编程:可变参数模板
一个可变参数模板通俗来讲就是:一个接受可变数目参数的模板函数或模板类在c++11之前,类模板和函数模板只能含有固定数量的模板参数,c++11增加了可变模板参数特性:允许模板定义中包含0到任意个模板参数。声明可变参数模板时,需要在typename或class后面加上省略号"..."。就像我上面指出的源码那样在了解其之前我们要先知道什么是参数包?可变数目的参数被称为参数包。存在两种参数包:表示零个或多个模板参数表示零个或多个函数参数怎么好理解可变参数模板呢?原创 2022-10-13 14:00:38 · 2014 阅读 · 5 评论 -
C++11:弱引用智能指针
弱引用智能指针可以看做是的助手,它不管理内部的指针。没有重载操作符 * 和 ->,因为它不共享指针,不能操作资源,所以它的构造不会增加引用计数,析构也不会减少引用计数,它的主要作用就是作为一个旁观者监视 shared_ptr 中管理的资源是否存在。1.1 初始化在 C++11 中,;构造了一个空 weak_ptr 对象;通过一个空 weak_ptr 对象构造了另一个空 weak_ptr 对象;通过一个 shared_ptr 对象构造了一个可用的 weak_ptr 实例对象。...原创 2022-09-17 09:45:00 · 796 阅读 · 0 评论 -
C++11:独占智能指针
std::unique_ptr 是一个独占型的智能指针,它不允许其他的智能指针共享其内部的指针,可以通过它的构造函数初始化一个独占智能指针对象,但是不允许通过赋值将一个 unique_ptr 赋值给另一个 unique_ptr,但是可以通过函数返回给其他的 std::unique_ptr,还可以通过 std::move 来转译给其他的 std::unique_ptr,这样原始指针的所有权就被转移了,这个原始指针还是被独占的。...原创 2022-09-16 09:00:00 · 2195 阅读 · 0 评论 -
C++11:共享智能指针
在 C++ 中没有垃圾回收机制,必须自己释放分配的内存,否则就会造成内存泄露。解决这个问题最有效的方法是使用智能指针(smart pointer)。智能指针是存储指向动态分配(堆)对象指针的类,用于生存期的控制,能够确保在离开指针所在作用域时,自动地销毁动态分配的对象,防止内存泄露。智能指针的核心实现技术是引用计数,每使用它一次,内部引用计数加1,每析构一次内部的引用计数减1,减为0时,删除所指向的堆内存。...原创 2022-09-14 09:28:49 · 5922 阅读 · 0 评论 -
C++11:移动语义和完美转发
移动语意对带有资源托管的对象,资源可以转移的且转移后能保证安全的,特别适合,还能降低析构复杂度,一些天生具有不可复制性对象也特别适合,比如unique_ptr。通俗理解就是一些带资源的对象需要拷贝时,想要有浅拷贝的效率,还想要深拷贝析构时安全的效果,正所谓鱼和熊掌不可兼得,其它对象,移动语意可能就没有什么明显的优势。......原创 2022-09-10 21:30:00 · 907 阅读 · 0 评论 -
C++11:右值和右值引用
左值和右值是独立于他们的类型的,右值引用类型可能是左值也可能是右值。编译器会将已命名的右值引用视为左值,将未命名的右值引用视为右值。auto&&或者函数参数类型自动推导的T&&是一个未定的引用类型,它可能是左值引用也可能是右值引用类型,这取决于初始化的值类型。通过右值推导 T&& 或者 auto&& 得到的是一个右值引用类型,其余都是左值引用类型。......原创 2022-08-29 14:35:48 · 1220 阅读 · 9 评论 -
C++11:自动类型推导auto/decltype
在 C++11 中增加了很多新的特性,比如可以使用 auto 自动推导变量的类型,还能够结合 decltype 来表示函数的返回值。使用新的特性可以让我们写出更加简洁,更加现代的代码。原创 2022-08-26 13:47:32 · 396 阅读 · 0 评论