`

智能指针

阅读更多
为啥想学boost呢,因为它名气大?其实主要还是因为工作中有不要地方用到了不少智能指针,bind等一些东西,想直接完全理解起来还有点难。
boost.smart_ptr库提供了六种智能指针,包括scoped_ptr,scoped_array,shared_ptr,shared_array,weak_ptr和instrusive_ptr,来增强std::auto_ptr,而且是异常安全的。它们都很轻量,速度和原始指针差不多,但是类型T有一个要求:类型T的析构函数不能抛出异常,析构函数最好不要抛出异常不是被很多大牛重申了N次了吗?
原因是:1.能够在异常转递的堆栈辗转开解(stack-unwinding)的过程中,防止terminate被调用。2.它能帮助确保析构函数总能完成我们希望它做的所有事情。

独占与共享:
holder类型独占一个对象
template<typename T>
class Holder{
private:
    T* ptr;
public:
    Holder():ptr(0){
    }
    explicit Holder(T* p):ptr(p){
    }
    ~Holder(){
        delete ptr;
    }
    //针对新指针的赋值运算符
    Holder<T>& operator=(T* p){
        delete ptr;
        ptr = p;
        return *this;
    }
    T& operator*()const{
        return *ptr;
    }
    T* operator->()const{
        return ptr;
    }
    T* get()const{
        return ptr;
    }
    void release(){
        ptr = 0;
    }
    void exchange_with(Holder<T>& h){
        swap(ptr,h.ptr);
    }
    void exchange_with(T*& p){
        swap(ptr,p);
    }
private:
    //不向外提供拷贝构造函数和拷贝赋值运算符
    Holder (Holder<T> const&);
    Holder<T>& operator=(Holder<T> const&);
};

trule可以使对象的拥有者从一个holder传递给另一个holder
#ifndef TRULE_H
#define TRULE_H

template<typename T>
class Holder;

template<typename T>
class Trule{
private:
    T* ptr;
public:
    Trule(Holder<T>& h){
        ptr = h.get();
        h.release();
    }

    Trule(Trule<T> const& t){
        ptr = t.ptr;
        const_cast<Trule<T>&>(t).ptr = 0;
    }
    ~Trule(){
        delete ptr;
    }
private:
    Trule(Trule<T>&);
    Trule<T>& operator=(Trule<T>&);
    friend class Holder<T>;
};

#endif // TRULE_H

分享到:
评论

相关推荐

    c++智能指针最全知识点即面试题目总结

    本篇文章收集了近一年来所有关于智能指针的面试相关内容。以智能指针的面试题线索,穿插讲解完最常用的四种智能指针的各个方面。本文讲解4个智能指针的基本概念和特性,以及其他设计到的知识点。讲解的过程中,如果...

    stl中的智能指针

    STL 中的智能指针 智能指针是一种特殊的指针,它可以自动管理内存,避免手动 delete 导致的内存泄露问题。在 STL 中,有多种智能指针,每种都有其特点和用途。本文将详细介绍 STL 中的智能指针,包括 std::auto_ptr...

    智能指针错误用法demo

    智能指针是C++编程中一个非常重要的工具,它在管理动态分配的内存时提供了自动释放的功能,大大降低了内存泄漏的风险。然而,如果不正确地使用智能指针,反而可能导致一些严重的问题,例如悬挂指针、内存泄漏或者...

    智能指针与引用计数详解

    智能指针是C++编程中一个非常重要的概念,它是一种自动管理内存的对象,用来封装原始指针,确保在适当的时候释放所指向的对象。在C++中,智能指针的主要作用是防止内存泄漏,通过自动地跟踪和管理对象的生命周期来...

    智能指针的简单实现

    智能指针是C++编程中一个非常重要的概念,它是一种对象,封装了原始指针,并在需要时自动管理所指向的对象的生命周期。智能指针的主要目的是解决C++中的内存管理和资源管理问题,防止因手动释放内存导致的内存泄漏...

    c++智能指针的创建

    C++智能指针的创建 C++中的指针是很麻烦的,难以管理和释放内存。为了减少问题的出现,现在有很多技巧去减少问题的出现。智能指针是其中一种解决方案。 智能指针是一种特殊的类,它可以模拟指针的行为,但同时也...

    C++智能指针测试代码

    C++ 7种智能指针测试代码

    智能指针最全资料-5篇经典讲义

    智能指针是C++编程中一个非常重要的概念,它是一种对象,可以自动管理其所指向的动态内存资源。在C++中,智能指针通过实现RAII(Resource Acquisition Is Initialization)原则,来确保内存的自动释放,从而避免了...

    C++智能指针-unique-ptr智能指针详解.pdf

    《C++智能指针——unique_ptr智能指针详解》 智能指针是C++中用于自动管理动态分配内存的一种工具,它可以确保在适当的时候自动释放内存,从而避免内存泄漏的问题。其中,`unique_ptr`是一种特殊的智能指针,它拥有...

    smartptr——基于自动引用计数的智能指针

    智能指针相信大家听说过吧,我理解的智能指针,既是一个C++模板类,重载了指针操作符(-&gt;)和(*)操作符,而使它的实例可以"用指针的形式去调用"。 它可以接管任意类型的指针,所以你只需要放心大胆的new出任意对象...

    c++句柄,智能指针 指针间的区别

    "c++句柄、智能指针和指针的区别" 在C++编程中,句柄、智能指针和指针是三个相关但不同的概念。理解它们之间的区别对于初学者来说非常重要。 首先,让我们来讨论指针和句柄的区别。指针是指向物理内存地址的指针...

    C++智能指针(含内存计数)

    在C++编程中,智能指针是一种特殊类型的对象,它表现得像常规指针,但自动管理所指向的对象的生命周期。智能指针的核心目标是防止内存泄漏,这是C++编程中一个常见的问题,尤其是在处理动态分配的内存时。内存泄漏指...

    c++智能指针的实现

    智能指针是用来实现指针指向的对象的共享的。其实现的基本思想: 每次创建类的新对象时,初始化指针并将引用计数置为1; 当对象作为另一对象的副本而创建时,拷贝构造函数拷贝指针并增加与之相应的引用计数; 对一个...

    C++中智能指针的设计和使

    ### C++中智能指针的设计和使用 #### 智能指针概述 在C++中,智能指针是一类特殊的设计模式,旨在通过模仿原始指针的行为来提供额外的安全性和资源管理机制。它们通常用来解决传统指针所带来的内存泄漏问题和其他...

    C++智能指针实现

    智能指针是存储指向动态分配(堆)对象指针的类, 用于生存期控制, 能够确保自动正确的销毁动态分配的对象,防止内存泄露。它的一种通用实现技术是使用引用计数(reference count)。智能指针类将一个计数器与类指向的...

    Chromium学习之智能指针

    ### Chromium中的智能指针实现分析 #### 一、引言 在C++编程语言中,内存管理是一项重要的任务。为了防止资源泄露或悬挂指针等问题的发生,开发者们常常需要手动管理对象的创建与销毁。然而,这样的做法不仅繁琐...

Global site tag (gtag.js) - Google Analytics