C++ 智能指针详解
一、简介
由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete。程序员忘记 delete,流程太复杂,最终导致没有 delete,异常导致程序过早退出,没有执行 delete 的情况并不罕见。用智能指针便可以有效缓解这类问题,本文主要讲解参见的智能指针的用法。包括:std::auto_ptr、boost::scoped_ptr...
分类:
其他好文 时间:
2016-04-22 19:53:53
阅读次数:
158
智能指针可以用来处理动态内存回收的问题但一旦令智能指针指向动态内存如:inta=2;
scoped_ptr<int>spi1(&a);程序肯定会发生崩溃。原因是在spi1出了作用域进行析构函数的时候,会对栈内存进行delete,这是不合法的。假如能解决这个问题,我们的智能指针就能指向任何..
分类:
其他好文 时间:
2016-04-12 16:06:03
阅读次数:
172
什么叫RAII(ResourceAcquisitionIsInitialization)?RAII指的就是资源分配即初始化,它的作用就是定义一个类来封装资源的分配和释放,在构造函数完成资源的分配和初始化,在析构函数完成资源的清理,可以保证资源的正确初始化和释放。它是一种技术。为什么要使用RAII?在堆上分..
分类:
其他好文 时间:
2016-04-06 18:54:12
阅读次数:
196
智能指针:动态的管理开辟的内存,防止人为的内存泄漏。
SharedPtr的实现:
原理:使用引用计数的原理使多个对象可以指向一块空间。
#define_CRT_SECURE_NO_WARNINGS
#include<iostream>
usingnamespacestd;
template<classT>
classSharedPtr
{
public:
SharedPt..
分类:
其他好文 时间:
2016-03-30 19:47:06
阅读次数:
167
我们知道c++标准库中定义了智能指针auto_ptr,但是我们很少用它,因为虽然它能够自动回收动态开辟的内存,不需要程序员自己去维护动态开辟的内存,但是当用它去赋值或者是拷贝构造时有一个管理权转移的过程,这样我们就不能很方便的使用auto_ptr。下面是简单的auto_ptr的实现,..
分类:
编程语言 时间:
2016-03-30 18:04:49
阅读次数:
245
smart_ptr
raii ( Resource Acquisition Is Initialization )
智能指针系列的都统称为smart_ptr,包括c++98标准的auto_ptr
智能指针是一个类,通过重载->和*完成类似原始指针的操作。不过因为是类,所以可以做比如内存管理、线程安全之类的工作
智能指针均是自动管理内存,不需要显示调用delete
scoped_ptr...
分类:
其他好文 时间:
2016-03-26 07:59:56
阅读次数:
210
RAII(ResourceAcquisitionIsInitialization)资源分配即初始化,定义一个类来封装资源的分配和释放,在构造函数完成资源的分配和初始化,在析构函数完成资源的清理,可以保证资源的正确初始化和释放。智能指针:用自动化或者说智能的指针来实现对动态内存的释放。它是一个类,有..
分类:
其他好文 时间:
2016-03-23 23:49:17
阅读次数:
217
auto_ptr与scoped_ptr的实现见本人的上篇博客。三、shared_ptrshared_ptr的实现原理是通过引用计数来实现,只有当引用计数为1时才释放空间,否则只需将引用计数减1.拷贝和赋值将引用计数加1,具体代码如下:template<typenameT>
classSharedPtr
{
public:
SharedPtr();
..
分类:
其他好文 时间:
2016-03-23 23:48:50
阅读次数:
210
引言:由于C++语言没有自动内存回收机制,程序员每次new出来的内存都要手动delete。程序员忘记delete,流程太复杂,最终导致没有delete,异常导致程序过早退出,没有执行delete的情况并不罕见。RAII(ResourceAcquisitionIsInitialization)资源分配即初始化,定义一个类来封装资..
分类:
编程语言 时间:
2016-03-22 00:54:14
阅读次数:
350
RAII(ResourceAcquisitionIsInitialization):资源分配即初始化,定义封装一个类,用来实现调用构造函数时就可完成资源的分配和初始化,在调用析构函数就可完成资源的清理,以实现对资源的初始化和清理。智能指针:用自动化或者说智能的指针来实现对动态内存的释放。它是一个类..
分类:
编程语言 时间:
2016-03-21 02:07:36
阅读次数:
509