《Effective C++》在资源管理一节提到了智能指针,智能指针中最著名的当属auto_ptr和shared_ptr。本文主要研究两者的实现。auto_ptr的实现:templateclass auto_ptr{private: T *ap;public: explicit au...
分类:
其他好文 时间:
2015-06-03 17:35:48
阅读次数:
116
为什么要用智能指针?
我们知道在C++中,资源管理是个头疼的问题。资源管理最常做的就是内存管理。而指针用起来如果忘记归还,就会导致内存泄露。
比如:class Oneclass{};
int func(){
Oneclass* one=new Oneclass;
if(!one)return 1;
delete one;
return 0;
}可见,上面代码中,我...
分类:
编程语言 时间:
2015-06-02 09:29:59
阅读次数:
138
auto_ptr 智能指针(C98)#includeusing namespace std;void main(){//auto_ptrfor ( int i = 0; i a_p(p);}cin.get();}查看任务管理器:
分类:
其他好文 时间:
2015-05-26 21:14:33
阅读次数:
156
这些智能指针在设计的时候,一个关键的问题就是所有权的控制。如果把指针所指向的对象比作电视机的话,那么指针就是观众。第一个人需要看电视的时候需要打开它,没人看的时候就要保证把电视关掉。
对于std::auto_ptr,boost::shared_ptr和scoped_ptr,情况如下:
1. std::auto_ptr:auto_ptr这个种族很有趣,每次只让一个人看电视,大家可以换着看,由...
分类:
编程语言 时间:
2015-05-22 00:35:17
阅读次数:
154
tr1::shared_ptr和tr1::auto_ptr都提供一个get成员函数,返回智能指针内部的原始指针:
)operator*和operator->隐式转换至底部指针:
注意:...
分类:
其他好文 时间:
2015-05-19 22:38:07
阅读次数:
166
Pair对 class Pair 可以将两个值视为一个单元,c++标准库中任何两个需要返回两个值的地方都要pair。 pair中的make_pair函数可以不显式指定类型的构造一个pair对象,如:void f(std::pair);void g(std::pair);……void foo(){ f...
分类:
其他好文 时间:
2015-05-19 20:29:54
阅读次数:
157
auto_ptr智能指针:其析构函数自动对其所指对象调用delete
若对象auto_ptr不指向某一资源,它会设为null
shared_ptr具有相同功能
但是多个shared_ptr对象能同时指向同一资源
注意:...
分类:
其他好文 时间:
2015-05-18 23:02:27
阅读次数:
160
#include
using namespace std;template
class auto_ptr
{
public:
auto_ptr(Type *d = NULL):ptr(d),own(d!=NULL){}
auto_ptr(const auto_ptr &ap)
{
ptr = ap.r...
分类:
编程语言 时间:
2015-05-13 10:18:59
阅读次数:
136
条款12: 以对象管理资源 两种只能指针: std:auto_ptr当使用copy操作室,原先的智能指针指向为nullstd:tr1:share_ptr spi();当可以多个指向同样的地址,但是当delete是会进行根据指向改地址的指针数量是否要delete这块内存条款13 在资源管理中小心cop...
分类:
编程语言 时间:
2015-05-09 23:23:57
阅读次数:
227
??
shared_ptr是一个引用计数智能指针,用于共享对象的所有权。它可以从一个裸指针、另一个shared_ptr、一个auto_ptr、或者一个weak_ptr构造。还可以传递第二个参数给shared_ptr的构造函数,它被称为删除器(deleter)。删除器用于处理共享资源的释放,这对于管理那些不是用new分配也不是用delete释放的资源时非常有用。shared_ptr被创建后,就可以...
分类:
编程语言 时间:
2015-05-05 12:35:00
阅读次数:
179