zoukankan      html  css  js  c++  java
  • C++中的句柄类

    初次在《C++ Primer》看到句柄,不是特别理解。在搜索相关资料后,终于有了点头绪。

    首先明白句柄要解决什么问题。参考文章《C++ 沉思录》阅读笔记——代理类

    场景:

    我们要把继承类绑定到基类的实例对象中

    该场景有两个问题需要解决:内存分配和未知对象的绑定

    有如下解决方案

    1. 直接复制继承类对象到基类对象中
      问题:很多时候基类是抽象类,无法实例化;不知道继承类是什么类型,其会被当成基类类型,会丢失自身的属性;
    2. 用基类指针存储继承类对象的地址
      问题:若继承类对象被释放,则基类指针就成了悬垂指针,指向什么就不知道了
    3. 使用一个成员函数copy,让继承类告诉别人他自身是什么类;利用该成员函数复制对象到基类对象中 
      这是一个比较好的解决方案,但仍美中不足:
      1. 复制对象,需要内存开销
      2. 从设计类的时候就要考虑为类定义成员函数copy
    4. 考虑引用。但引用会造成一系列更严重的内存管理和安全问题。
    这个时候句柄就派上用场了。参考文章: 《C++ 沉思录》阅读笔记——句柄类
    句柄
    1. 私有成员包含类指针,使用者不能直接操作类指针,但可以通过句柄类提供的函数使用类的接口函数
    2. 私有成员包含int指针类型的引用计数值,避免多次复制副本产生大量内存开销
      1. 计数值为0时,删除副本;
      2. 计数值首次赋值时,复制原对象,因此即使原对象被删除,也不会出现垂悬指针的问题。

    总结:

    句柄类避免了使用者接触指针,因此使用者不用考虑其内存管理句柄类使用引用计数的方式,来避免每次复制都需要拷贝对象。

  • 相关阅读:
    深度学习中的Data Augmentation方法(转)基于keras
    caffe pytho接口
    finetuning caffe
    windows下配置Faster-RCNN
    caffe中的props
    centos上搭建git服务--3
    centos上搭建git服务--2
    Centos上搭建git服务
    loadrunner--基础2
    loadrunner11--基础使用
  • 原文地址:https://www.cnblogs.com/Jimtastic/p/5220001.html
Copyright © 2011-2022 走看看