STL模板_智能指针概念】的更多相关文章

一.智能指针1.类类型对象,在其内部封装了一个普通指针.当智能指针对象因离开作用域而被析构时,其析构函数被执行,通过其内部封装的普通指针,销毁该指针的目标对象,避免内存泄露.2.为了表现出和普通指针一致的外观和行为,重载了解引用运算符(*)和间接成员访问运算符(->)函数,令其使用者可以将一个智能指针当成普通指针一样地使用.3.智能指针没有拷贝语义,只有转移语义,任何时候都只有一个智能指针对象持有真正的对象地址.4.智能指针不支持对象数组.二.模板的非类型参数1.无论是函数模板还是类模板,其模板…
map的键值的类型 -可以是自定的类型(对象.函数指针.智能指针....) -但是有副作用-当自己定义的类型键值无法用系统自己提供的 < 或者 > 进行排序的时候,会出现各种问题 -所以需要自己定义比较器来进行处理 解决: -如果键值是对象类型 -可以自己在类中对 < 或者 > 运算符进行重载 -不需要对==进行重载 -因为元素的排序是根据<,和> 进行比较的 eg: -a > b 则 b <= a; -这边有点疑问..待补充.... class Key{…
智能指针类模板智能指针本质上就是一个对象,它可以像原生指针那样来使用. 智能指针的意义-现代C++开发库中最重要的类模板之一-C++中自动内存管理的主要手段-能够在很大程度上避开内存相关的问题 1.内存泄露,在测试阶段很难发现.造成的原因就是申请堆空间中的内存,忘记释放. 2.多次指针释放:一个指针指向了一片堆空间中的内存,这片内存只需要释放一次,如果在代码中不小心释放了多次,后果也是不确定的,有可能程序马上会死掉,有可能程序过一段时间才死掉. STL中的智能指针auto_ptr-生命周期结束时…
转载至: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_p…
前面已经学习过auto_ptr,这里补充另外一种智能指针,比auto_ptr要更强力更通用的shared_ptr. shared_ptr 简介及使用选择  几乎所有的程序都需要某种形式的引用计数智能指针,这种指针让我们不再需要为两个对象或更多对象共享的对象的生命周期而编写复杂的逻辑(写起来有点绕口),当被共享的对象引用计数降为0时,被共享对象被自动析构. 引用计数指针分为插入式(instrusive)和非插入式(non-instrusive)两种.前者要求它所管理的类提供明确的函数或数据成员用于…
1.只有函数运算符可以带缺省函数,其他运算符函数主要由操作符个数确定 2.解引用运算符和指针运算符 示例代码: #include <iostream> using namespace std; class A{ public: A():m_data(data) { cout << "A构造" << endl; } ~A(void) { cout << "A析构" << endl; }int m_data;…
一.STL(Standard Template Library,标准模板库)概述1.容器:基于泛型的数据结构.2.算法:基于泛型的常用算法.3.迭代器:以泛型的方式访问容器中的元素,是泛型的算法可以应用在泛型的容器中.4.实用工具:string.auto_ptr等等.二.容器.迭代器和算法1.双向线性链表2.迭代器3.算法三.十大容器线性 向量(vector)容器 双端队列(deque) 列表(list)----------------------------------适配 堆栈(stack)…
模板和STL一.模板的背景知识1.针对不同的类型定义不同函数版本.2.借助参数宏摆脱类型的限制,同时也因为失去的类型检查而引 入风险.3.借助于编译预处理器根据函数宏框架,扩展为针对不同类型的 具体函数版本,一方面统一编写通用的算法和结构,另一方面 也具有函数调用的类型安全性.4.通过编译器根据函数模板生成具体函数——类型参数化.int add (int x, int y) { ... } // x和y是值参数int a = 10, b = 20, c;c = add (a, b);templa…
一.向量(续)1.大小和容量大小:容器中元素的个数.容量:容器中可容纳元素的个数.size_type size (void) const; // 获取大小void resize (size_type num, value_type const& val = value_type ()); // 改变大小往小改,被裁减掉的元素将被析构.往大改,新增出来的元素将被构造,第二个参数表示初始值.void clear (void); // 清空,相当于resize (0)bool empty (void)…
简介 weak_ptr是shared_ptr的观察者,它不会干扰shared_ptr所共享对象的所有权,当一个weak_ptr所观察的shared_ptr要释放它的资源时,它会把相关的weak_ptr的指针设置为空,防止weak_ptr持有悬空的指针.为什么需要weak_ptr,很多情况下需要旁观或者使用一个共享资源,但不接受所有权,如为了防止递归的依赖关系,你就要旁观一个资源而不能拥有所有权,或者为了避免悬空指针(悬空指针和野指针的概念经常不太区分,都指那些指向已释放的或者访问受限制的内存的指…