当前位置: 首页 > news >正文

装修公司做网站推广能接到活吗百度识图扫一扫

装修公司做网站推广能接到活吗,百度识图扫一扫,成都做网站的公司,优化方案数学2023版电子版三. 资源管理 13. 以对象管理资源 请记住: 为防止资源泄露,使用智能指针 14. 在资源管理类中小心copying行为 请记住: 复制RAII对象必须一并复制他所管理的资源,所以资源的copying行为决定RAII对象的copying行为普遍而常见的…

三. 资源管理

13. 以对象管理资源

请记住

  • 为防止资源泄露,使用智能指针

14. 在资源管理类中小心copying行为

请记住

  • 复制RAII对象必须一并复制他所管理的资源,所以资源的copying行为决定RAII对象的copying行为
  • 普遍而常见的RAII class copying行为是:抑制copying、施行引用计数法(reference counting)。不过其他行为也都可能被实现。

解释
‌‌‌‌  RAII(资源获取即初始化)是C++中一个非常重要的概念,它用于管理对象生命周期内的资源分配和释放问题。

‌‌‌‌  对于复制RAII对象,首要问题就是如何处理它所管理的资源。实际上,资源的复制行为决定了RAII对象的复制行为,不同的策略会对管理资源的对象的复制产生不同的影响:

  • 抑制复制(Prohibit Copying):既简单又有效。在这种情况下,复制构造函数和赋值运算符通常被声明为private,并且不传递任何实现。这阻止了复制和赋值。这是一个好的默认行为,通常适用于管理不可共享资源的类(如文件、线程、互斥锁等)。
class Uncopyable {
private:Uncopyable(const Uncopyable&);Uncopyable& operator=(const Uncopyable&);
};
  • 引用计数(Reference Counting):这种方法允许复制,同时确保原始资源的生命周期恰到好处。具体来说,只有当最后一个引用被销毁时,才会清理底层资源。std::shared_ptr是一种典型的实现引用计数的RAII类。
std::shared_ptr<int> p(new int[10]);
std::shared_ptr<int> q = p;  // 引用计数增加
  • 深度复制(Deep Copying):在这种策略中,我们为每个RAII对象创建一份新的资源副本。这比引用计数更安全,但可能更为费时,因为它需要复制所有数据。

  • 转移资源所有权(Transfer Ownership):通过移动语义(C++11开始提供),可以将资源从一个对象转移到另一个对象,而不需要复制。这通常适用于管理大块资源的RAII对象,例如std::unique_ptr

根据特定的类管理的资源类型和预期的用途,可以选择适合的策略来处理RAII对象的复制行为。这是面向对象的设计的一个重要方面。

15. 在资源管理类中提供对原始资源的访问

请记住

  • APIs往往要求访问原始资源,所以每一个RAI class应该提供一个“取得其所管理之资源”的办法。
  • 对原始资源的访问可能经由显式转换或隐式转换。一般而言显示转换比较安全,但隐式转换对客户比较方便。

解释
‌‌‌‌  资源获取即初始化(RAII)的类确实经常需要提供获取其管理的资源的方式。这样的设计并不会违背RAII原则,因为资源的所有权仍然在RAII对象中,但一些情况下确实需要让程序员能够访问这些底层资源。

这些底层资源的访问方式主要分为两种:

  • 显式转换:这样的设计使得访问者必须显示地请求访问资源。这样可以减少因误用底层资源而导致的问题。std::unique_ptr就是一个很好的例子,它提供了.get()方法来显式获取底层的原始指针。
std::unique_ptr<int> p(new int());
int* raw = p.get();
  • 隐式转换:这提供了对使用者更为简单的访问方式,但是如果使用不当,可能带来风险。比如,std::shared_ptr可以被隐式转化为bool类型,这使得我们能够在条件语句中使用。
std::shared_ptr<int> p(new int());
if (p) {// 如果 p 管理着一个对象,那么将会执行这里的代码
}

‌‌‌‌  一般来说,显式转换更为安全,因为它强制要求使用者意识到他们正在直接操作底层资源。然而,隐式转换可以使代码更简洁,提供更好的用户体验。因此,应根据特定的使用场景和对安全性的要求来确定哪种方法更为合适。

16. 成对使用new和delete时要采取相同形式

请记住

  • 如果你在new表达式中使用[],必须在相应的delete表达式中也使用[]。
  • 如果你在new表达式中不使用[],一定不要在相应的delete表达式中使用[]。

解释
‌‌‌‌  在C++中,这个规则非常重要,因为不正确地使用new[]delete[]会导致未定义的行为。

  1. 当我们使用new[]来分配数组时,必须使用delete[]来删除该数组。如果我们只用delete,就可能会出现内存泄漏。
int* array = new int[10];
delete[] array; // 正确的使用方式
  1. 另一方面,当我们使用new分配单个元素时,必须使用delete(不带[])来删除。如果我们使用delete[]来删除非数组类型的指针,那也会导致未定义的行为。
int* single = new int();
delete single; // 正确的使用方式

‌‌‌‌  这组规则是相当重要的,因为它们涉及到C++运行时环境如何在堆上分配和管理内存。遵循这些规则不仅可以避免内存泄漏,也能防止程序因为错误的内存释放操作而崩溃。

newnew[]以及deletedelete[]的区别主要在于它们处理的数据结构和内存分配的方式:

  1. newdelete:这两个操作符主要用于分配和释放单个对象的内存。
int* p = new int;       // 分配一个整数的内存
delete p;               // 释放该整数的内存
  1. new[]delete[]:这两个操作符用于分配和释放数组的内存。
int* arr = new int[10]; // 分配10个整数的内存
delete[] arr;           // 释放这10个整数的内存

‌‌‌‌  对于这两对操作符,最重要的一点是必须配对使用。也就是说,我们不能使用new来分配内存然后使用delete[]释放内存,反之亦然。

‌‌‌‌  注意:newnew[]分配的内存不会被自动释放,我们需要手动调用相应的delete或者delete[]来释放这些内存,否则将导致内存泄漏。这是一个常见的编码错误,也是使用RAII(资源获取即初始化)技术的主要原因,它可以通过在对象的生命周期结束时自动释放其拥有的资源,从而防止内存泄漏。

17. 以独立语句将newed对象置入智能指针

请记住
‌‌‌‌  以独立语句将newed对象存储于智能指针内。如果不这样做,一旦异常被抛出,有可能导致难以察觉的资源泄露。

解释
‌‌‌‌  智能指针主要的优点就是它可以保证在任何情况下,包括出现异常时,都可以正确地释放内存。在C++中,如果我们创建了一个普通的指针并使用new分配了内存,但在释放这个内存前出现了异常,那么这个内存就会泄露。

‌‌‌‌  由于异常可能在new之后的任何时间发生,所以我们无法确定何时捕获并处理这个异常。因此,为了避免内存泄露,我们应该尽快将这个指针转换为智能指针。如果我们在创建智能指针对象的同一条语句中使用new,那么即使出现异常,内存也会安全地释放。

std::unique_ptr<int> ptr(new int(10));    // 创建一个存储int的智能指针

‌‌‌‌  虽然将new和智能指针的初始化放在同一行更简洁,但为了避免new在智能指针接管之前就抛出异常导致的任何可能的资源泄露,提倡以独立语句将newed对象存储于智能指针内。如:

int* temp = new int(10);
std::unique_ptr<int> ptr(temp);    // 创建一个存储int的智能指针

‌‌‌‌  这样,即使在new和智能指针的初始化之间抛出异常,我们也可以保证delete temp;被调用,防止了内存泄漏。

http://www.yidumall.com/news/26573.html

相关文章:

  • 周口市建设职工培训中心网站中国的搜索引擎有哪些
  • 政府网站栏目网站推广的方法
  • qq网页版 入口百度seo优化排名
  • 微服务平台怎么下载网站页面优化方法
  • 做网站怎么单独写手机页面哪个浏览器看黄页最快夸克浏览器
  • 中英文网站制作seo技巧分享
  • 做外贸的网站开店流程排行榜123网
  • 网页制作与网站建设宝典seo01网站
  • b2b 网站开发廊坊seo关键词排名
  • 旅游网站开发的意义相关资料谷歌关键词排名查询
  • 理解wordpress轮翻图代码seo是啥
  • 做 cad效果图网站网站排名靠前方法
  • 如何用网站模板建设网站手机自动排名次的软件
  • 做网站测试心得店铺推广怎么做
  • 网站建设和优化要求宁波seo搜索平台推广专业
  • 创办一个网站多少钱做一套二级域名网站怎么做
  • 上海响应式网站建设费用百度地图推广
  • 义乌网站建设zisou8广州seo营销培训
  • 做塑胶原料用什么网站好郑州seo服务公司
  • 博州住房和城乡建设部网站域名查询 ip
  • 域名备案中网站负责人奶茶软文案例300字
  • 云南建设厅网站安全处seo排名优化工具推荐
  • 为女友做网站晋城网站seo
  • 旅游网站开发费用口碑营销案例分析
  • 企业建网站 优帮云佛山全网营销推广
  • 怎么做网络销售的网站淘宝店铺怎么推广和引流
  • 河南郑州网站设计公司营销软件站
  • 典型的网站案例百度云网页版登录入口
  • asp.net mvc网站发布教程百度seo软件
  • 佛山做网站3000百度站长app