/* * Copyright (c) 1997-1999 * Silicon Graphics Computer Systems, Inc. * * Permission to use, copy, modify, distribute and sell this software * and it...
分类:
其他好文 时间:
2015-07-07 09:21:11
阅读次数:
182
在资源管理器中小心copying行为上节是对资源的管理说明,有时候我们不能依赖于shared_ptr或者auto_ptr,所以我们需要自己建立一个资源管理类来管理自己的资源。例如建立一个类来管理Mutex锁,现在使用函数处理类型为Mutex的互斥器对象class Lock{
public:
explicit Lock(Mutex* mu):mutexPtr(mu)
{...
分类:
编程语言 时间:
2015-06-24 13:05:32
阅读次数:
125
在资源管理类中提供对原始资源的访问前面两节都在讨论如何管理资源,一般情况下,使用资源管理类来屏蔽原始资源,对抗内存泄露等问题,避免使用原始资源。这样我们就无法直接访问原本的原始资源。毕竟程序在有些时候是需要操纵原始资源的,许多APIs要求使用原始资源。为了能操纵原始资源,我们要怎么做?
还好,shared_ptr和auto_ptr都提供一个get函数,用于执行这样的显示转换。这时如果在调用API时...
分类:
编程语言 时间:
2015-06-24 12:59:20
阅读次数:
125
#include
using namespace std;template
class auto_ptr_
{
public:
auto_ptr_(Type *t = NULL) :ptr(t), count(new int(1))
{
}
auto_ptr_(const auto_ptr_& at) :ptr(at...
分类:
编程语言 时间:
2015-06-20 18:27:19
阅读次数:
149
#include
using namespace std;template//引用计数的只能指针
class auto_ptr_
{
public:
auto_ptr_(Type *t = NULL):ptr(t), count(1)
{
}
auto_ptr_(const auto_ptr_& at)...
分类:
编程语言 时间:
2015-06-20 09:12:08
阅读次数:
136
智能指针解决了资源生存期管理的问题(尤其是动态分配的对象)。智能指针有各种不同的风格。多数都有一种共同的关键特性:自动资源管理。这种特性可能以不同的方式出现:如动态分配对象的生存期控制,和获取及释放资源 (文件, 网络连接)。这里主要讨论第一种情况,它们保存指向动态分配对象的指针,并在正确的时候删除这些对象。 何时我们需要智能指针?
有三种典型的情况适合使用智能指针:
? 资源所有权的...
分类:
其他好文 时间:
2015-06-18 11:35:53
阅读次数:
197
场景:
1. 使用auto_ptr 的方式可以wrap类对象, 之后在方法结束后可以自动释放对象, 参考;这样在有条件判断的语句时可以省掉free语句或CloseHandle.
http://blog.csdn.net/infoworld/article/details/9008911
2.C++的特性之一就是类对象(非返回值的对象)在方法结束后会自动调用析构函数,这样在析构函数里可以放一些释放资源的操作.
3. 这里实现了一个类似auto_ptr的类的实用Wrap类,可以参考根据自己需要自定义特...
分类:
编程语言 时间:
2015-06-14 18:35:49
阅读次数:
178
auto_ptr是c++标准库中的一种严格所有权型的智能指针,实现在backward/auto_ptr.h文件中pro:1、做临时变量时,不需要手动去释放资源void f() { ClassA *p = new ClassA; ...... // 如果这抛出异常,还会有...
分类:
其他好文 时间:
2015-06-10 20:39:57
阅读次数:
130
1、用对象去管理资源获得资源对象指针后,立即放入资源管理对象中std::auto_ptr pA(createA())2、考虑复制行为禁止复制设为深拷贝转移资源所有权3、自定义new/delete 主要目的可以是:强化效率额外工作,如统计、加签名等 主要注意问题是:每自定义一个new,都要对应自定.....
分类:
其他好文 时间:
2015-06-09 16:34:49
阅读次数:
145
//【C++】智能指针auto_ptr的简单实现
#include
using namespace std;
template
class auto_ptr
{
public:
auto_ptr(_Ty *_P = 0) :_Owns(_Ptr != 0), _Ptr(_P)
{}
auto_ptr(const auto_ptr &p):_Owns(p._Owns),_Ptr(...
分类:
编程语言 时间:
2015-06-05 17:32:36
阅读次数:
135