一般的智能指针都是通过一个普通指针来初始化,所以很容易写出以下的代码: #include using namespace std; int func1(){ //返回一个整数的函数 } void func2(AutoPtr ptr,int t){ //一些操作 } int ... ...
分类:
其他好文 时间:
2016-12-27 00:30:03
阅读次数:
248
智能指针是能够智能化的动态开辟空间和内存释放。C++中引入智能指针,是防止我们在动态开辟空间是,由于疏忽大意,导致内存的释放出现问题,最终致使内存泄漏。智能指针的基本特点:(1)智能指针管理的是一块内存的释放。(2)智能指针是一个类,有类似指针的功能。AutoPtr:#..
分类:
其他好文 时间:
2016-04-25 15:14:59
阅读次数:
169
智能指针的三种常见写法:一、最开始的原始写法,原始写法可以理解为指针转移的方法。template<typenameT>
classAutoPtr
{
public:
AutoPtr()
:_ptr(NULL)
{}
AutoPtr(T*ptr)
:_ptr(ptr)
{}
~AutoPtr()
{
if(_ptr)
{
delete_ptr;
_ptr=NULL;
}
}
AutoPtr<T>(Aut..
分类:
编程语言 时间:
2016-04-21 07:36:46
阅读次数:
211
智能指针:是存储指向动态分配对象指针的类。能够在适当的时间自动删除指向的对象。下面是它的三种实现://autoptr
template<classT>
classAutoptr
{
public:
Autoptr(T*ptr)
:_ptr(ptr)
{}
~Autoptr()
{
if(_ptr)
{
delete_ptr;
_ptr=NULL;
}
}
Aut..
分类:
其他好文 时间:
2016-04-20 02:14:48
阅读次数:
138
RAII:资源分配及初始化。但是这个翻译并没有显示出这个惯用法的真正内涵。RAII的好处在于它提供了一种资源自动管理的方式,当出现异常,回滚等现象时,RAII可以正确的释放资源。内存泄漏会导致:1.内存耗尽2.其他程序可能用不了了3.程序崩溃在资源的获取和释放之间,我们通常..
分类:
其他好文 时间:
2016-04-07 01:41:25
阅读次数:
204
智能指针(上)#define_CRT_SECURE_NO_WARNINGS1//AutoPtr(新方案)#include<iostream>usingnamespacestd;template<classT>classAutoPtr{public:AutoPtr(T*ptr):_ptr(ptr){}AutoPtr(AutoPtr<T>&ap):_ptr(ap._ptr){ap._ptr=NULL;//交换管理权,将ap1置空..
分类:
其他好文 时间:
2016-04-05 16:26:32
阅读次数:
272
对于智能指针AutoPtr,一般有两种实现的方法,一种是s1与s2同时指向一个空间的时候,将s1置为空,这样就会避免析构的时候产生麻烦。#include<iostream>#include<string>usingnamespacestd;template<classT>classAutoPtr{protected: T*_ptr;public: AutoPtr(T*..
分类:
其他好文 时间:
2016-04-05 14:15:28
阅读次数:
219
方案一:因为在类中对同一块空间的析构在一次以上,就会发生错误,所以在进行赋值和拷贝构造时(同一块空间有一个以上的指针指向),保证只有一个指针指向这块空间,对原指针赋空操作,这样在析构时一块空间只会被析构一次classAutoPtr
{
public:
//构造函数
AutoPtr(T*ptr)
..
分类:
其他好文 时间:
2016-04-04 21:08:19
阅读次数:
155
#pragmaonce//智能指针//定义个类来封装资源的分配和释放,在构造函数完成资源的分配和初始化,在析构函数完成资源的//清理,可以保证资源的正确初始化和释放。//这里简单实现AutoPtr、ScopedPtr、ScopedArray以及SharedPtr//------------------------------SmartPtr.h--------..
分类:
编程语言 时间:
2016-04-01 06:48:39
阅读次数:
274
1.智能指针template<classT>
classAutoPtr
{
public:
AutoPtr(T*ptr)
:_ptr(ptr)
{
}
~AutoPtr()
{
if(_ptr!=NULL)
{
cout<<"delete"<<_ptr<<endl;
delete_ptr;
_ptr=NULL;
}
}
AutoPtr(AutoPtr<T>&ap)
:_ptr(ap._ptr)
{
ap._ptr=NULL;//管..
分类:
其他好文 时间:
2016-04-01 06:43:53
阅读次数:
124