众所周知。C++中对堆内存的申请与释放全然由用户来控制,这就造成用户在使用的时候常常造成内存泄漏、野指针、反复释放等常见的挂掉问题,所以我们有必要提供一套机制。使得用户仅仅需申请对应的内存,不用管释放的问题,事实上这属于著名的RAII(Resource Acquisition Is Initiali ...
分类:
编程语言 时间:
2017-05-30 12:26:54
阅读次数:
189
1、迭代器(iterators)概念(1)迭代器是一种抽象的设计概念,其定义为:提供一种方法,使他能够按顺序遍历某个聚合体(容器)所包含的所有元素,但又不需要暴露该容器的内部表现方式。 (2)迭代器是一种行为类似智能指针的对象, 而指针最常见的行为就是内 容提领和成员 访问。 因此迭代器最重要的行为 ...
分类:
其他好文 时间:
2017-05-25 00:13:37
阅读次数:
231
new与数组 为了让new分配一个对象数组,必须在类型名之后跟[].在其中指明分配的数目; 初始化,C++11:可用花括号{}; 动态分配一个空数组是合法的; 释放动态数组: 智能指针与动态数组: 标准库提供了一个可以管理new分配的数组的unique_ptr版本 必须在类型后面加上空的[]; 注意 ...
分类:
编程语言 时间:
2017-05-14 18:52:49
阅读次数:
224
动态内存: 运算符:new,delete 智能指针: shared_ptr类 智能指针也是模板,创建指针时,提供指针指向的类型; make_shared 函数 引用计数:一旦一个shared_ptr的计数器变为0,它就会自动释放自己所管理的对象; shared_ptr自动销毁所管理的对象,通过 析构 ...
分类:
编程语言 时间:
2017-05-13 22:16:20
阅读次数:
199
作用域指针 当我们并不打算复制智能指针,仅仅是想保证被分配的资源将被正确地回收,能够採用一种简单得多的解决方式:作用域指针。例如以下演示样例代码: template <typename T> class ScopedPtr { public: explicit ScopedPtr(T* p = NU ...
分类:
其他好文 时间:
2017-05-12 16:35:17
阅读次数:
122
1. boost::shared_ptr 前面我已经讲解了两个比较简单的智能指针,它们都有各自的优缺点。由于 boost::scoped_ptr 独享所有权,当我们真真需要复制智能指针时,需求便满足不了了,如此我们再引入一个智能指针,专门用于处理复制,参数传递的情况,这便是如下的boost::sha ...
分类:
编程语言 时间:
2017-05-11 22:30:52
阅读次数:
337
目录 理解智能指针的原理 智能指针的使用 智能指针的设计和实现 理解智能指针的原理 智能指针的使用 智能指针的设计和实现 1.智能指针的作用 C++程序设计中使用堆内存是非常频繁的操作,堆内存的申请和释放都由程序员自己管理。程序员自己管理堆内存可以提高了程序的效率,但是整体来说堆内存的管理是麻烦的, ...
分类:
编程语言 时间:
2017-05-09 00:57:42
阅读次数:
233
动态内存和智能指针 动态内存: 1.针对堆里面存放的对象 2.使用new delete运算符 3.智能指针:shared_ptr(多个指针指向同一个对象); unique_ptr(一个指针指向一个对象); weak_ptr(弱引用,管理shared_ptr) 4.标准库函数:make_shared< ...
分类:
编程语言 时间:
2017-05-07 10:23:34
阅读次数:
136
一、内存泄漏(臭名昭著的bug) (1)、动态申请堆空间,用完后不归还 (2)、c++语言中没有垃圾回收机制 (3)、指针无法控制所指向的堆空间生命周期(如局部指针生命周期结束了堆空间的生命周期还未结束) 二、智能指针 1、当代c++平台的智能指针 (1)、指针生命周期结束时主动释放堆空间 (2)、 ...
分类:
其他好文 时间:
2017-05-06 14:11:40
阅读次数:
224
快速导航 一、 回顾历史二、 智能指针简介三、 Delphi中的interface四、 Delphi中智能指针的实现五、 interface + 泛型 = 强类型的智能指针!六、 智能指针与集合七、 注意事项八、 总结 本随笔所有源代码打包下载 一、回顾历史 在c++中,对象可以创建在栈里,也可以创 ...
分类:
编程语言 时间:
2017-04-28 10:20:36
阅读次数:
303