14年,一个技术的轮回 坦白说,这些新特性在我日常工作中几乎用不到。 为什么?...最关键的 并不是 c++本身,明白了,进入相关行业, 我为什么痴迷于写demo、研究原理? 都是被现实逼的。...Part 1 面试官提问: 智能指针 shared_ptr 使用场景(其他指针无法代替) • boost::asio::async_write【需要考虑什么事情】 • 循环引用 Part 2 我的回答...没有 shared_from_this() 的危险写法: class Transport { public: void sendAsync() { ioWorker_.asyncWrite....html 为什么在 boost::asio::async_write() 中一定要用 shared_from_this()。
,那么如果他绑定的shared_ptr已经释放了资源,那么他去访问资源就是很危险的 weak_ptr支持expired检查指向的资源是否过期,use_count也可获取shared_ptr的引用计数...,所以要使用堆上动态开辟的⽅式构造智能指针对象时来⼀份资源,就要new⼀个引⽤计数出来 多个shared_ptr指向资源时就++引⽤计数(两个对象里面同时有两个指针指向资源,同时有另外两个指针指向引用计数...Boost库是为C++语⾔标准库提供扩展的⼀些C++程序库的总称,Boost社区建⽴的初衷之⼀就是为C++的标准化⼯作提供可供参考的实现,Boost社区的发起⼈Dawes本⼈就是C++标准委员会的成员之...⼀ 在Boost库的开发中,Boost社区也在这个⽅向上取得了丰硕的成果,C++11及之后的新语法 和库有很多都是从Boost中来的 2....内存泄漏 8.1 什么是内存泄漏,内存泄漏的危害 什么是内存泄漏:内存泄漏指因为疏忽或错误造成程序未能释放已经不再使⽤的内存,⼀般是忘记释放或者发⽣异常释放程序未能执⾏导致的。
如果开发环境支持的话,可以使用 memory 中定义的 std::shared_ptr。.../build/Desktop_Qt_6_5_3_GCC_64bit-Debug/boost...12多亏了有 boost::shared_ptr,我们才能像上例中展示的那样,在标准容器中安全的使用动态分配的对象...这就导致了一个潜在的问题:reset() 线程在销毁对象的时候print() 线程可能正在访问它。...如果所使用的 C++ 标准实现不支持技术报告1的话,还可以使用 Boost C++ 库里实现的 boost::unordered_set 和 boost::unordered_map。...库 | 是什么?
一、智能指针简介 1、 什么是智能指针?...2、 为什么要有智能指针 ? 我们知道智能指针主要是用来管理资源,避免内存泄漏等问题的出现,要了解为什么要设计智能指针,我们首先要了解什么是内存泄漏。 、什么是内存泄漏?... shared_ptr shared_ptr 也是c++11设计的智能指针,它的特点是共享,支持拷贝,也支持移动,如果需要拷贝的场景,我们推荐使用shared_ptr。...weak_ptr也没有重载operator*和operator->等,因为他不参与资源管理,那么如果他绑定的 shared_ptr已经释放了资源,那么他去访问资源就是很危险的。...2、Boost的贡献 智能指针:如boost::shared_ptr、boost::weak_ptr和boost::scoped_ptr等,提供了安全、高效的动态内存管理机制,通过引用计数等方式自动管理对象的生命周期
析构后,右边节点就释放了; 那左边节点的_next什么时候释放呢?...weak_ptr没有重载operator*和operator->,它不参与资源管理(如果weak_ptr绑定的shared_ptr已经析构了,那如果再去访问就和危险); weak_ptr支持了expired...六、内存泄露 什么是内存泄漏?...八、Boost库 最后,我们来了解一下Boost库 Boost库是c++语言标准库提供的扩展的一些C++程序库,Boost社区建立的初衷之一就是为了c++标准化工作提供参考。...Boost社区的发起人Dawes本人就是C++委员会的成员之一。 在Boost库的开发中Boost社区在这个方向上取得了丰硕的成果。
各位老师好(老师是山东对人的尊称,就像称呼帅哥美女一样) C++周刊 (c++ weekly)第二期开始了 本期预告: • 本期我们将深入理解shared_ptr • 帮你破解大厂经典面试题智能指针使用场景...10 值语义 智能指针究竟在考什么 11 指针 使用 C++ 智能指针遇到的坑 二、Ceph 为什么放弃大量使用 shared_ptr 阶段 特点 问题 优化 早期 大量使用 shared_ptr...创建请求对象:一次潜在的 make_shared 分配 std::shared_ptr op = std::make_shared(msg);...• boost::intrusive_ptr为什么叫做倾入指针 #include boost/intrusive_ptr.hpp> #include "intrusive_ptr_base.hpp"...boost 库支持智能指针,包括 scoped_ptr、shared_ptr 以及 auto_ptr。
3.智能指针的引用计数 什么是引用计数?...shared_ptr和weak_ptr则是C+11从准标准库Boost中引入的两种智能指针。...这就是为何要摒弃auto_ptr的原因,一句话总结就是:避免因潜在的内存问题导致程序崩溃。...观察者意味着 boost::weak_ptr 只对 boost::shared_ptr 进行引用,而不改变其引用计数,当被观察的 boost::shared_ptr 失效后,相应的 boost::weak_ptr...如果你的编译器没有提供shared_ptr,可使用Boost库提供的shared_ptr。 (2)如果程序不需要多个指向同一个对象的指针,则可使用unique_ptr。
这几个智能指针已经基本够我们使用了,90% 的使用过标准智能指针的代码就这 5 种。可如下还有两种智能指针,它们肯定有用,但有什么用处呢,一起看看吧。...首先 boost::weak_ptr 是专门为 boost::shared_ptr 而准备的。有时候,我们只关心能否使用对象,并不关心内部的引用计数。...UseCount: 1 TestWeakPtr boost::shared_ptr UseCount: 1 ~Simple: 1 我们看到,尽管被赋值了,内部的引用计数并没有什么变化,当然,读者也可以试试传递参数等其他情况...现在要说的问题是,boost::weak_ptr 到底有什么作用呢?...3、在对象需要共享的情况下,使用 boost::shared_ptr(当然动态数组使用boost::shared_array)。
weak_ptr也没有重载operator*和operator->等,因为他不参与资源管理,那么如果他绑定的shared_ptr已经释放了资源,那么他去访问资源就是很危险的。...中智能指针的关系 Boost库是为C++语言标准库提供扩展的一些C++程序库的总称,Boost社区建立的初衷之一就是为C++的标准化工作提供可供参考的实现,Boost社区的发起⼈Dawes本⼈就是C++...在Boost库的开发中,Boost社区也在这个方向上取得了丰硕的成果,C++11及之后的新语法 和库有很多都是从Boost中来的。 C++ 98 中产生了第一个智能指针auto_ptr。...需要注意的是unique_ptr对应boost的scoped_ptr。并且这些智能指针的实现原理是参考boost中的实现的。...八、内存泄漏 1、什么是内存泄漏,内存泄漏的危害 什么是内存泄漏:内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存,一般是忘记释放或者发生异常释放程序未能执行导致的。
不太方便因为lambda的类型很难获取,这里可以使用decltype来推导。...weak_ptr也没有重载operator*和operator->等,因为他不参与资源管理,那么如果他绑定的 shared_ptr已经释放了资源,那么他去访问资源就是很危险的。...C++11和boost中智能指针的关系 Boost库是为C++语⾔标准库提供扩展的⼀些C++程序库的总称,Boost社区建⽴的初衷之⼀就是为 C++的标准化⼯作提供可供参考的实现,Boost社区的发起⼈...在Boost库的开发中,Boost社区也在这个⽅向上取得了丰硕的成果,C++11及之后的新语法 和库有很多都是从Boost中来的。 C++ 98 中产⽣了第⼀个智能指针auto_ptr。...内存泄漏 8.1 什么是内存泄漏,内存泄漏的危害 什么是内存泄漏:内存泄漏指因为疏忽或错误造成程序未能释放已经不再使⽤的内存,⼀般是忘记释 放或者发⽣异常释放程序未能执⾏导致的。
这几个智能指针已经基本够我们使用了,90% 的使用过标准智能指针的代码就这 5 种。可如下还有两种智能指针,它们肯定有用,但有什么用处呢,一起看看吧。...首先 boost::weak_ptr 是专门为 boost::shared_ptr 而准备的。有时候,我们只关心能否使用对象,并不关心内部的引用计数。...: 1 TestWeakPtr boost::shared_ptr UseCount: 1 ~Simple: 1 我们看到,尽管被赋值了,内部的引用计数并没有什么变化,当然,读者也可以试试传递参数等其他情况...现在要说的问题是,boost::weak_ptr 到底有什么作用呢?...3、在对象需要共享的情况下,使用 boost::shared_ptr(当然动态数组使用 boost::shared_array)。
一、智能指针的使用及原理 1.1 为什么需要智能指针 在学习异常的时候,我们知道了由于异常的反复横跳可能会导致内存泄露的问题,但是对于一些自定类类型来说他在栈帧销毁的时候会去调用对应的析构函数...,然后再使用wake_ptr来解决这个场景 1.9 shared_ptr的定制删除器 为什么需要定制删除器呢??...C++ boost给出了更实用的scoped_ptr和shared_ptr和weak_ptr. 3. C++ TR1,引入了shared_ptr等。不过注意的是TR1并不是标准版。 4....C++ 11,引入了unique_ptr和shared_ptr和weak_ptr。需要注意的是unique_ptr对应boost的scoped_ptr。...可以把boost库理解成体验服 三、内存泄露 3.1 什么是内存泄漏,内存泄漏的危害 什么是内存泄漏:内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。
1.智能指针的使用场景分析 下⾯程序中我们可以看到,new了以后,我们也delete了,但是因为抛异常导,后⾯的delete没有得到执⾏,所以就内存泄漏了,所以我们需要new以后捕获异常,捕获到异常后...weak_ptr也没有重载operator*和operator->等,因为他不参与资源管理,那么如果他绑定的 shared_ptr已经释放了资源,那么他去访问资源就是很危险的。...中智能指针的关系 Boost库是为C++语⾔标准库提供扩展的⼀些C++程序库的总称,Boost社区建⽴的初衷之⼀就是为 C++的标准化⼯作提供可供参考的实现,Boost社区的发起⼈Dawes本⼈...在Boost库的开发中,Boost社区也在这个⽅向上取得了丰硕的成果,C++11及之后的新语法 和库有很多都是从Boost中来的。...需要注意的是unique_ptr对应boost的 scoped_ptr。并且这些智能指针的实现原理是参考boost中的实现的。
是通过delete来删除所管理对象的,而数组对象必须通过deletep[]来删除,因此boost::scoped_ptr是不能管理数组对象的,如果 要管理数组对象需要使用boost::scoped_array...如果没有这个需要的话,大可以使用boost::scoped_ptr,让编译器来进行更严格的检查,来发现一些不正确的赋值操作。...总结一下: 和前面介绍的boost::scoped_ptr相比,boost::shared_ptr可以共享对象的所有权,因此其使用范围基本上没有什么限制(还是有一些需要遵循的 使用规则,下文中介绍)...boost::shared_ptr并不是绝对安全,下面几条规则能使我们更加安全的使用boost::shared_ptr: 避免对shared_ptr所管理的对象的直接内存管理操作,以免造成该对象的重释放...,涉及到两种智能指针,跟踪起来难度很大,我也没什么心情像分析 shared_ptr 一样画多个图来解释流程,这个例子需要解释的代码远远比shared_ptr 多,这里只是解释怎样使用,有兴趣的朋友自 己去分析一下
如果没有这个需要的话,大可以使用boost::scoped_ptr,让编译器来进行更严格的检查,来发现一些不正确的赋值操作。...本想跟踪shared_ptr 的拷贝构造函数,在当行设置断点后F11直接跳过了,说明是shared_ptr类没有实现拷贝构造函数,使用的是编译器默认的拷 贝构造函数,那如何跟踪呢?...总结一下: 和前面介绍的boost::scoped_ptr相比,boost::shared_ptr可以共享对象的所有权,因此其使用范围基本上没有什么限制(还是有一些需要遵循的 使用规则,下文中介绍)...boost::shared_ptr并不是绝对安全,下面几条规则能使我们更加安全的使用boost::shared_ptr: 避免对shared_ptr所管理的对象的直接内存管理操作,以免造成该对象的重释放...因为此例子涉及到循环引用,而且是类成员引用着另一个类,涉及到两种智能指针,跟踪起来难度很大,我也没什么心情像分析 shared_ptr 一样画多个图来解释流程,这个例子需要解释的代码远远比shared_ptr
shared_ptr和weak_ptr则是C+11从准标准库Boost中引入的两种智能指针。...这就是为何要摒弃auto_ptr的原因,一句话总结就是:避免因潜在的内存问题导致程序崩溃。...观察者意味着 boost::weak_ptr 只对 boost::shared_ptr 进行引用,而不改变其引用计数,当被观察的 boost::shared_ptr 失效后,相应的 boost::weak_ptr...来构造weak_ptr,但是weak_ptr内部的引用计数并没有什么变化。...如果你的编译器没有提供shared_ptr,可使用Boost库提供的shared_ptr。 (2)如果程序不需要多个指向同一个对象的指针,则可使用unique_ptr。
参考链接: C++ signal() 最近在看陈硕大大 的《Linux 多线程服务端编程:使用 muduo C++ 网络库》 ,看到里面用variadic template 和boost智能指针 实现了一个...signal/slot,现在C++11 已经把 boost的智能指针引入到标准库里边了。...结果发现,只要把原来代码中boost智能指针替换为c++11 的智能指针,把陈大大自己实现的MutexLock替换为std::mutex, MutexLockGuard 替换为std::lock_guard...看来陈硕大大在很早以前就把握到了 C++ 的发展趋势啊。 在贴代码之前 ,先说几点。 一、 首先说一下shared_ptr的线程安全性,它的线程安全性级别和std::string是一样的。...那么我们分析一下,若在写操作时有其他线程要进行读操作会等待锁释放;而没有写操作时可以有很多读操作,在进入和退出读操作的过程中他们的引用计数分别加1、减1,从而保证了读操作时内存的确定以及读操作完成后内存的释放
,此时需要抛出异常,异常抛出之后,throw后面的语句不再执行,这就会导致我们申请的空间没有得到释放,从而导致内存泄露,这是很危险的,所以我们要借助智能指针来帮助我们自动的释放动态申请的资源~~~ 一、...->等,因为他不参与资源管理,那么如果他绑定的shared_ptr已经释放了资源,那么他去访问资源就是很危险的。...中智能指针的关系 Boost库是为C++语言标准库提供扩展的一些C++程序库的总称,Boost社区建立的初衷之一就是为C++的标准化工作提供可供参考的实现,Boost社区的发起人Dawes本人就是C++...在Boost库的开发中,Boost社区也在这个方向上取得了丰硕的成果,C++11及之后的新语法和库有很多都是从Boost中来的(直接借鉴)。...并且,这些智能指针的实现原理是参考boost中的实现的。 十、内存泄漏问题 10.1 什么是内存泄漏,内存泄漏的危害 10.1.1 理论:什么是内存泄漏? 什么是内存泄漏?
与 boost::scoped_ptr 比较。 unique_ptr 很小且高效;大小是一个指针,它支持用于从 c + + 标准库集合快速插入和检索的右值引用。 头文件:。...问题是很多人都会忘记在适当的地方加上delete语句,如果你要对一个庞大的工程进行review,看是否有这种潜在的内存泄露问题,那就是一场灾难!...一旦最后一个所指向对象的shared_ptr被销毁,所指向的对象就会被释放,即使此时有weak_ptr指向该对象,所指向的对象依然被释放。...如果你的编译器没有提供shared_ptr,可使用Boost库提供的shared_ptr。 (2)如果程序不需要多个指向同一个对象的指针,则可使用unique_ptr。...忘记delete造成的内存泄露 2. delete了,又被访问到了,比如并发时,导致“野指针”的危险情况 3. delete了,又被delete了,导致重复回收,导致报错中断程序 总的来说,一般推荐用智能指针