什么叫RAII(ResourceAcquisitionIsInitialization)?RAII指的就是资源分配即初始化,它的作用就是定义一个类来封装资源的分配和释放,在构造函数完成资源的分配和初始化,在析构函数完成资源的清理,可以保证资源的正确初始化和释放。它是一种技术。为什么要使用RAII?在堆上分..
分类:
其他好文 时间:
2016-04-06 18:54:12
阅读次数:
196
方案一:因为在类中对同一块空间的析构在一次以上,就会发生错误,所以在进行赋值和拷贝构造时(同一块空间有一个以上的指针指向),保证只有一个指针指向这块空间,对原指针赋空操作,这样在析构时一块空间只会被析构一次classAutoPtr
{
public:
//构造函数
AutoPtr(T*ptr)
..
分类:
其他好文 时间:
2016-04-04 21:08:19
阅读次数:
155
一开始学C++的时候老师推荐的就是Dev C++这个IDE,用起来感觉还不错,使用起来比较简单,而且属于比较轻量级的,不怎么占用内存;缺点可能就是调试功能没有项VS那种大型IDE齐全和好用,不过对于一个新手来说绝对足够了。 最近在一些工程中需要用到智能指针的库,比如说auto_ptr以及boost里 ...
分类:
编程语言 时间:
2016-04-04 14:46:31
阅读次数:
143
智能指针:动态的管理开辟的内存,防止人为的内存泄漏。
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
#define_CRT_SECURE_NO_WARNINGS
#include<iostream>
usingnamespacestd;
template<classT>
classAuto_ptr
{
public:
Auto_ptr(T*_x):x(_x)
{}
Auto_ptr(Auto_ptr<T>&s):x(s.x)
{
s.x=NULL;
}
Auto_ptr&operator=(Auto_ptr<T>&s)
{
x=s...
分类:
编程语言 时间:
2016-03-26 08:49:48
阅读次数:
263
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