C++ shared_ptr deleter的实现】的更多相关文章

#include <iostream>#include <memory>using namespace std; #include<iostream>class sp_base{public: virtual void del(void* obj) = 0; void inc_ref(){ ref_count_++; } void dec_ref(){ ref_count_--; } int ref_count()const{ return ref_count_; }p…
 std::shared_ptr 是通过指针保持对象共享所有权的智能指针.多个 shared_ptr 对象可占有同一对象大概实现了一下,主要实现原理为,共享指针内部持有堆资源 的指针以及引用计数的指针,通过对这两个指针的维护,达到多个共享对象对同一资源的控制 实现主要分为三个文件.share_ptr.h,smart_ptr_define.h, main.cpp  (编译平台:Linux centos 7.0 编译器:gcc 4.8.5 ) //smart_ptr_define.h #ifndef…
这是C++11新特性介绍的第五部分,涉及到智能指针的相关内容(shared_ptr, unique_ptr, weak_ptr). shared_ptr shared_ptr 基本用法 shared_ptr采用引用计数的方式管理所指向的对象.当有一个新的shared_ptr指向同一个对象时(复制shared_ptr等),引用计数加1.当shared_ptr离开作用域时,引用计数减1.当引用计数为0时,释放所管理的内存.       这样做的好处在于解放了程序员手动释放内存的压力.之前,为了处理程…
很久以前写在百度空间的这篇文章: [百度空间] [原] 全局operator delete重载到DLL 首先,纠正一个词“重载”,operator new/delete是替换(replacement),不是重载.只要任意一个编译单元定义了替换函数,并不需要全局声明,不用包含头文件,就会替换掉全局的默认operator new/delete, 这个行为非常像gcc的strong symbol/weak symbol. 最近翻看了C++03的标准: 3. The program’s definitio…
为什么unique_ptr的Deleter是模板类型参数,而shared_ptr的Deleter不是? template <class T, class D = default_delete<T>> class unique_ptr { public: ... unique_ptr (pointer p, typename conditional<is_reference<D>::value,D,const D&> del) noexcept; ..…
本文由作者邹启文授权网易云社区发布. std::shared_ptr 一次创建,多处共享,通过引用计数控制生命周期. 实例 在邮箱大师PC版中,我们在实现搜索时,大致思路是这样的: 每一个账号都有一个SearchFlow,搜索开始后,所有SearchFlow一起并发搜索, 当全部SearchFlow通过callback返回后,意味着搜索结束. 方案: 搜索前,使用std::set<int64_t> accounts记录那些并发搜索的账号, 当某个账号搜索完成时,在callback中从accou…
c++11标准废除乐auto_ptr, C++ 标准库智能指针 使用这些智能指针作为将指针封装为纯旧 C++ 对象 (POCO) 的首选项. unique_ptr 只允许基础指针的一个所有者. 除非你确信需要 shared_ptr,否则请将该指针用作 POCO 的默认选项. 可以移到新所有者,但不会复制或共享. 替换已弃用的auto_ptr. 与 boost::scoped_ptr 比较. unique_ptr 小巧高效:大小等同于一个指针且支持 rvalue 引用,从而可实现快速插入和对 ST…
// std_tr1__memory__shared_ptr_reset.cpp // compile with: /EHsc #include <memory> #include <iostream> struct deleter { void operator()(int *p) { delete p; } }; int main() { std::shared_ptr<)); //std::boolalpha bool类型输出为true或者false而不是0或者1,默认…
Defined in header <memory>       template< class T > class shared_ptr;   (since C++11)   std::shared_ptr is a smart pointer that retains shared ownership of an object through a pointer. Severalshared_ptr objects may own the same object; the ob…
C++中的动态内存管理是通过new和delete两个操作符来完成的.new操作符,为对象分配内存并调用对象所属类的构造函数,返回一个指向该对象的指针.delete调用时,销毁对象,并释放对象所在的内存.但在程序中使用new和delete容易导致很多问题,这里列出三个比较容易犯的错误. 我们new了一个对象,但没有delete它.这会引起memory leak内存泄露,可能会导致程序崩溃. 用指针访问一个已经被free的对象.这就是我们常说的dangling pointer. delelte同一个…