从零开始写STL - 智能指针】的更多相关文章

从零开始写STL - 智能指针 智能指针的分类及其特点: scoped_ptr:初始化获得资源控制权,在作用域结束释放资源 shared_ptr: 引用计数来控制共享资源,最后一个资源的引用被释放的时候会析构 unique_ptr: 只能有一个持有资源引用的对象 weak_ptr:eak_ptr也维护了一个引用计数,跟shared_ptr维护的引用计数或互不干扰,或相互协同.weak_ptr的指针会在weak_ptr维护的引用计数上加一,而shared_ptr会在shared_ptr维护的引用计…
从零开始写STL-栈和队列 适配器模式 意图:将一个类的接口转换成客户希望的另外一个接口.适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 主要解决:主要解决在软件系统中,常常要将一些"现存的对象"放到新的环境中,而新环境要求的接口是现对象不能满足的. 何时使用: 1.系统需要使用现有的类,而此类的接口不符合系统的需要. 2.想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作,这些源类不一定有一致的接口. 3.通…
转自: https://blog.csdn.net/k346k346/article/details/81478223 STL一共给我们提供了四种智能指针:auto_ptr.unique_ptr.shared_ptr和weak_ptr,auto_ptr是C++98提供的解决方案,C+11已将其摒弃,并提出了unique_ptr作为auto_ptr替代方案.虽然auto_ptr已被摒弃,但在实际项目中仍可使用,但建议使用较新的unique_ptr,因为unique_ptr比auto_ptr更加安全…
从0开始写STL-容器-vector vector又称为动态数组,那么动态体现在哪里?vector和一般的数组又有什么区别?vector中各个函数的实现原理是怎样的,我们怎样使用会更高效? 以上内容我们将通过写一个自己的vector来进行学习 typedef 简析 在容器类的最前面我们会看到许多的typedef ,常见的如下: public: typedef T value_type; typedef value_type* pointer; typedef value_type* iterat…
any class any; (since C++17) The class any describes a type-safe container for single values of any type. (1) An object of class any stores an instance of any type that satisfies the constructor requirements or is empty, and this is referred to as th…
function C++11 将任意类型的可调用(Callable)对象与函数调用的特征封装到一起. 这里的类是对函数策略的封装,将函数的性质抽象成组件,便于和algorithm库配合使用 基本运算符 和 基本比较符号组件 template<class Arg, class Result> struct unary_function { typedef Arg argument_type; typedef Result result_type; }; template<class Arg…
tuple Class template std::tuple is a fixed-size collection of heterogeneous values. It is a generalization of std::pair. 可以用来在bind中存储函数指针和参数 实现思路 不定参数模板 + 模板偏特化 tuple作为一个存储不定参数模板的类,分为一下几种偏特化形式: template<> struct tuple<> {}; template<typenam…
static const int _stl_num_primes = 28; template<typename T, typename Hash = xhash<T>> class hashtable; ministl::vector<int> prime_list = { 53, 97, 193, 389, 769, 1543, 3079, 6151, 12289, 24593, 49157, 98317, 196613, 393241, 786433, 15728…
这一部分只要把搜索树中暴露的接口封装一下,做一些改动. set源码剖析 template<typename T> class set { public: typedef T key_type; typedef BStree_iterator<T> iterator; private: BStree<T> sequence; public: set() :sequence() {} iterator begin() { return sequence.begin(); }…
一.前序 什么是智能指针? ——是一个类,用来存储指针(指向动态分配对象也就是堆中对象的的指针). c++的内存管理是让很多人头疼的事,当我们写一个new语句时,一般就会立即把delete语句直接也写了,但是我们不能避免程序还未执行到delete时就跳转了或者在函数中没有执行到最后的delete语句就返回了,如果我们不在每一个可能跳转或者返回的语句前释放资源,就会造成内存泄露.使用智能指针可以很大程度上的避免这个问题,因为智能指针就是一个类,当超出了类的作用域是,类会自动调用析构函数,析构函数会…