• 关于autoptr


    参考自: http://www.cppblog.com/expter/archive/2009/03/29/78270.html

    auto_ptr是什么。

    解释1.auto_ptr是一个管理指针的对象,防止内存泄漏和便于程序员编程时的内存管理
    解释2.auto_ptr所做的事情,就是动态分配对象以及当对象不再需要时自动执行清理。
    值得注意的是auto_ptr是一个"对象" 而非指针。

    原理(摘自EFFECTIVE C++ 条款13):当把资源放进对象内,当控制流离开函数,对象的析构函数会自动释放那些资源,
    所以实际上是 C++的"析构函数自动调用机制"确保资源被释放。

    auto_ptr的应用地方

    取代局部指针变量
    类的指针成员变量

    总体来说就是防止函数在运行到delete资源之前突然退出,导致没有把资源delete回收出现的内存泄漏。

    用auto_ptr需要引用的头文件:
    #include<memory>


    局限性:

    1.auto_ptr不能指向数组
    2.不要将auto_ptr对象作为STL容器的元素

    3.不能通过赋值操作来初始化auto_ptr (会使得原来的指针指向变为NULL)

     1 // 自定义一个仿智能指针
     2 template<typename Type>
     3 class Auto_ptr
     4 {
     5 public:
     6     Auto_ptr(Type *p =NULL) :Ptr(p)
     7     {     }
     8     ~Auto_ptr()
     9     {
    10         delete Ptr;
    11     }
    12     Type* operator ->()
    13     {
    14         return Ptr;
    15     }
    16 private:
    17     Type *Ptr;
    18 };
    View Code

    可以看出其内部十分简单,大概原理也就如此 但这个类只适用于操纵类成员或者类函数,操纵普通数据如int float也可以,但不能输出其值,因为没有重载<<运算符

    使用示例:

    Auto_ptr<string> sw(new string("wwss"));
    sw->append("ssss");
    string q = sw->substr(0,sw->length()-1);
    cout<<q<<endl;

    再回到stl版本的auto_ptr
    一般来说 auto_ptr管理的对象是类的指针成员变量
    如class A

    A* a = new A();
    auto_ptr<A> ss(a);  //这样把a放进了ss里面管理,之后就可以用ss代替a进行操作。

    之后就不用使用delete a释放内存了。

    Coding Life
  • 相关阅读:
    zz解读NoSQL技术代表之作Dynamo
    愚蠢且能干
    Schema 验证和 DTD 验证
    Office Addin (VSTO) Performance Tips & Tricks
    提高 .NET 应用 XML 处理性能的几点开发经验(转载)
    C# 实现对XML文件的基本操作(创建xml文件,增、删、改、查 xml节点信息)zz
    XML/XSLT/XPATH
    Linux下基于DNS的多机均衡负载的实现
    Linux 上的高可用中间件,第 3 部分: IBM LoadLeveler
    Creating Web Services using Apache
  • 原文地址:https://www.cnblogs.com/lewiskyo/p/4214592.html
Copyright © 2020-2023  润新知