资源管理

  • 以对象管理资源
  1. 常见的资源包括:内存,文件描述符,互斥锁,数据库连接,图形界面中的字型和和笔刷,以及网络socket
  2. 获得资源后立刻放进管理对象 (RAII resource acquisition is initialization,资源取得时机便是初始化时机)
  3. 管理对象运用析构函数确保资源被释放
  4. 为防止资源泄漏,请使用RALL对象,它们在构造函数中获得资源并在析构函数中释放资源
  5. 常用的如shared_ptr unique_ptr 
  6. shared_ptr unique_ptr两者都在其析构函数中调用delete而不是delete[],这意味着在动态分配的数组身上使用shared_ptr 是个馊主意。
  • 在资源管理类中小心copying行为 
  1. 复制RALL对象必须一并复制它所管理的资源,所以资源的copying行为决定RALL对象的copying行为。
  2. 常见的RALL class copying行为是:抑制copying,施行引用计数等。
  • 在资源管理类中提供对原始资源的访问
  1. 对原始资源的访问可能经由显式转换或者隐式转化,一般而言,显式转换比较安全,隐式转换对客户比较方便
  • 成对使用new 和 delete时要采用相同形式
  • 以独立语句将newd对象置入智能指针
  1. 因为编译器的调用动作特性,一旦异常被抛出,有可能导致难以察觉的资源泄漏
  2. 编译器的调用特殊顺序可能导致潜在的资源泄漏。
posted @ 2023-03-13 10:32  stu--wy  阅读(46)  评论(0)    收藏  举报