美文网首页
c++ STL简析(2) 智能指针

c++ STL简析(2) 智能指针

作者: 水果无味 | 来源:发表于2017-11-19 17:52 被阅读0次

姓名   郭宇

学号  16130130299

嵌牛导读】:c++ STL原理及组成

【嵌牛鼻子】:泛型编程  STL 原理

【嵌牛提问】:智能指针的使用及简单介绍

【嵌牛正文】:

     c++指针操作在带来方便的同时 ,也出现了很多问题。原因在于    指针操作每个使用new创建的对象都需要使用delete删除 ,如果忘掉了会造成内存泄露之。所以会出现上述问题1是在于c++提供的指针过于原始指针相关操作的正确性全部需要人工来保证但人最容易出错。所以c++1之父 Bjarne Stroustrup 提出了 RAII 设计理念 即  把资源(内存)与指针对象的生命期绑定起来创建对象的同时立即为其分配资源,对象销毁时则立即释放资源。

 1 智能指针的基本原理  把裸指针(原始指针)和与他相关的操作封装成一个类,并在对象创建的时候必定要调用构造函数以及在对象销毁时必调用析构函数,分别进行资源的分配与释放操作。当然为了保证对象的操作方式看起来与裸指针相同,这个封装类还要重载operator->和operator *。

下面为一段代码 

#include<iostream>

using namespace std;

template<class T>

class myptr{

private:T *ptr;//裸指针 

public:

myptr(T*p): ptr(p)//构造函数获得资源 

{cout<<"生时获得资源"<<endl;}

T& operator  *()

{

return *ptr;

}

T* operator->()

{

return _ptr;

}

~myptr()//析构函数

{

cout<<'' 死前释放资源"<<endl;

delete ptr;

}

};

int main(int argc, char** argv) {

int a=100;

{

myptrp(&a);//指针对象生命期开始

cout<<"打印资源"<<*p<<endl;

}

}

2 可共享资源的智能指针  :  在程序设计中 ,需要多个指针指向同一个资源, 这时 ,资源的释放 就不能单纯的取决于某一个指针对象的生命期 ,既不能在还有指针使用资源的时候其它指针释放资源 也不能在都不需要资源时没有及时释放资源。为这种指针设置可以按照规则决定资源去留的资源管理者是解决上述问题的办法之一。采用计数器作为资源管理者是实现这种智能指针的一种通用方式,技术资源使用时令计数值加一的方式向管理者登记,以减一的方式进行注销,当计数值为0时管理者立即释放资源。

如下代码 

#include<iostream>

using namespace std;

template  <typename T>  class shareptr;

template<typename T>

class res_ptr{

private:

T* res_p;        //指向 资源的裸指针

int use_num; //计数器

res_ptr(int*p):  res_p(p), use_num(1){

cout<<"gouzaohanshu”"<<endl;

}

~res_ptr()//析构函数

{

delete res_p;

cout<<"xigouhanshu"<<endl;

}

friend class shareptr<T>;

};资源使用者的友元类声明

};// 类中以友元类的方式指定 资源使用者所属的类, shareptr 由于这个类的析构函数仅完成了资源释放工作 所以使用者类除了在构造函数中为计数器加一之外 ,还必须在析构函数中为计数器减一,并判断是否应释放资源.

第一次创建指向资源的指针对象时 使用一个裸指针为指针对象初始化 同时将引用计数器的初始值定为1  然后在每创建一个对象的副本时 拷贝构造函数会把计数器值 加一 在销毁一个对象时 由析构函数将计数器减一 如果 //引用计数器减到0 则销毁对象 ptr 进而在 res_ptr 中的析构函数释放其所指向的资源

上述为一个带有计数器的资源管理者类 !

相关文章

  • c++ STL简析(2) 智能指针

    姓名 郭宇 学号 16130130299 【嵌牛导读】:c++ STL原理及组成 【嵌牛鼻子】:泛型编程 STL...

  • c++ STL 简析 智能指针

    姓名 郭宇 学号 16130130299 【嵌牛导读】:c++ STL原理及组成 【嵌牛鼻子】:泛型编程 STL...

  • C++ STL 之智能指针

    本节我们将介绍 C++ STL 中智能指针的使用。 智能指针(英语:Smart pointer)是一种抽象的数据类...

  • 再说智能指针

    一 STL的智能指针及使用 STL中智能指针有std::shared_ptr std::weak_ptr std:...

  • 技能

    C++ C++特性 C++11 多态和继承 构造函数 析构函数 手写代码实现string类 手写代码实现智能指针 ...

  • C++研发工程师笔试题/面试题(1-10)

    1. (1) 简述智能指针的原理;(2)c++中常用的智能指针有哪些?(3)实现一个简单的智能指针。 简述智能指针...

  • c++ STL简析(1)

    姓名 郭宇 学号 16130130299 【嵌牛导读】:c++ STL原理及组成 【嵌牛鼻子】:泛型编程 STL ...

  • 16/4 标准模板库

    c++库中90%是stl,stl的绝大多数是模板 迭代器 1为普通指针调用,2为迭代器遍历数组vector内容 s...

  • C++智能指针和四种转换

    1、智能指针 智能指针,无需手动释放内存 2、C++中的四种转换 const_cast 转换常量 static_c...

  • C++学习日志(2)

    本内容源于geekband c++ 一.拷贝构造,拷贝赋值,析构 1、用于有指针成员情况 2、拷贝构造 Strin...

网友评论

      本文标题:c++ STL简析(2) 智能指针

      本文链接:https://www.haomeiwen.com/subject/ikkpvxtx.html