c++ primer plus 第15章友,異常和其他 15.3.11 有關異常的注意事項

c++ primer plus 第15章友,異常和其他 15.3.11 有關異常的注意事項

15.3.11 有關異常的注意事項

文章目錄

  • c++ primer plus 第15章友,異常和其他 15.3.11 有關異常的注意事項
  • 15.3.11 有關異常的注意事項


15.3.11 有關異常的注意事項

從前面關于如何使用異常的討論可知,應在設計程序時就加入異常處理功能,而不是以后再添加。這樣做有些缺點。例如,使用異常會增加程序代碼,降低程序的運行速度。異常規范不適用于模板,因為模板函數引發的異常可能隨特定的具體化而異。異常和動態內存分配并非總能協同工作。下面進一步討論動態內存分配和異常。首先,請看下面的函數:

void testl(int n)
{
string mesg("I'm trapped in an endless loop");i
if (oh_no)throw exception();...
return;
}

string 類采用動態內存分配。通常,當函數結束時,將為mesg 調用string 的析構函數。雖然 throw語句過早地終止了函數,但它仍然使得析構函數被調用,這要歸功于棧解退。因此在這里,內存被正確地管理。
接下來看下面這個函數:

void test2(int n)
{
double*ar = new double[n];...
if (oh_no)
throw exception);
...
delete [] ar;
return;
}

這里有個問題。解退棧時,將刪除棧中的變量ar。但函數過早的終止意味著函數末尾的 delete[]語句被忽略。指針消失了,但它指向的內存塊未被釋放,并且不可訪問。總之,這些內存被泄漏了。這種泄漏是可以避免的。例如,可以在引發異常的函數中捕獲該異常,在catch塊中包含一些清理代碼,然后重新引發異常:

void test3(int n)
{
double*ar=new double[n];
try{
if(oh_no)
throw exception()
}
catch(exception & ex)
{delete [] arr;throw;
}
... delete []arr;
return ;
}

然而,這將增加疏忽和產生其他錯誤的機會。另一種解決方法是使用第16章將討論的智能指針模板
總之,雖然異常處理對于某些項目極為重要,但它也會增加編程的工作量、增大程序、降低程序的速度。另一方面,不進行錯誤檢查的代價可能非常高。
異常處理

在現代庫中,異常處理的復雜程度可能再創新高--主要原因在于文檔沒有對異常處理例程進行解釋或解釋得很整腳。任何熟練使用現代操作系統的人都遇到過未處理的異常導致的錯誤和問題。這些錯誤背后的程序員通常面臨一場艱難的戰役,需要不斷了解庫的復雜性:什么異常將被引發,它們發生的原因和時間,如何處理它們,等等。 程序員新手很快將發現,理解庫中異常處理像學習語言本身一樣困難,現代庫中包含的例程和模式可能像 C++語法細節一樣陌生而困難。要開發出優秀的軟件,必須花時間了解庫和類中的復雜內容,就像必須花時間學習 C++本身一樣。通過庫文檔和源代碼了解到的異常和錯誤處理細節將使程序員和他的軟件受益。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/43818.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/43818.shtml
英文地址,請注明出處:http://en.pswp.cn/web/43818.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vue實現表單輸入框數字類型校驗功能

vue實現表單輸入框數字類型校驗功能 1. 樣式代碼 <el-form-item label"訂單總價"><el-input size"small" v-model"form.totalPrice" placeholder"請輸入訂單總價 正整數或者2位數小數" input"check(form.totalPric…

SpringSecurity中文文檔(Servlet Authorize HttpServletRequests)

Authorize HttpServletRequests SpringSecurity 允許您在請求級別對授權進行建模。例如&#xff0c;對于 Spring Security&#xff0c;可以說/admin 下的所有頁面都需要一個權限&#xff0c;而其他所有頁面只需要身份驗證。 默認情況下&#xff0c;SpringSecurity 要求對每個…

Umi.js 項目中使用 Web Worker

1.配置 Umi.js 在 Umi.js 中&#xff0c;需要通過配置來擴展 Webpack 的功能。在項目根目錄下修改 config/config.ts 文件&#xff1a; export default defineConfig({chainWebpack(config) {config.module.rule(worker).test(/\.worker\.ts$/).use(worker-loader).loader(wo…

C語言之指針的奧秘(二)

一、數組名的理解 int arr[10]{1,2,3,4,5,6,7,8,9,10}; int *p&arr[0]; 這里使用 &arr[0] 的?式拿到了數組第?個元素的地址&#xff0c;但是其實數組名本來就是地址&#xff0c;而且是數組首元素的地址。如下&#xff1a; 我們發現數組名和數組?元素的地址打印出…

重要文件放u盤還是硬盤?硬盤和u盤哪個適合長期存儲

在數字時代&#xff0c;我們每天都會處理大量的文件。其中&#xff0c;不乏一些對我們而言至關重要的文件&#xff0c;如家庭照片、工作文檔、財務記錄等。面對這些重要文件的存儲問題&#xff0c;我們通常會面臨&#xff1a;“重要文件放U盤還是硬盤”、“硬盤和U盤哪個適合長…

Vue2打包部署后動態修改后端接口地址的解決方法

文章目錄 前言一、背景二、解決方法1.在public文件夾下創建config文件夾&#xff0c;并創建config.js文件2.編寫config.js內容3.在index.html中加載config.js4.在封裝axios工具類的js中修改配置 總結 前言 本篇文章將介紹使用Vue2開發前后端分離項目時&#xff0c;前端打包部署…

系統架構師考點--系統安全

大家好。今天我來總結一下系統安全相關的考點&#xff0c;這類考點每年都會考到&#xff0c;一般是在上午場客觀題&#xff0c;占2-4分。 一、信息安全基礎知識 信息安全包括5個基本要素&#xff1a;機密性、完整性、可用性、可控性與可審查性 (1)機密性&#xff1a;確保信息…

Navicat導入sql文件

文章目錄 Navicat導入SQL文件&#xff0c;使用默認導入&#xff0c;不做任何修改報錯嘗試一修改運行時的選擇 嘗試二修改my.ini的配置文件 Navicat導入SQL文件&#xff0c;使用默認導入&#xff0c;不做任何修改報錯 嘗試一 修改運行時的選擇 取消勾選 ‘每個運行中運行多重查…

C++ 判斷語句的深入解析

C++ 判斷語句的深入解析 C++ 是一種廣泛使用的編程語言,以其高效性和靈活性著稱。在 C++ 中,判斷語句是控制程序流程的關鍵組成部分,它們允許程序根據不同的條件執行不同的代碼路徑。本文將深入探討 C++ 中的判斷語句,包括 if、else if、else 以及 switch 語句,并展示如何…

3,區塊鏈加密(react+區塊鏈實戰)

3&#xff0c;區塊鏈加密&#xff08;react區塊鏈實戰&#xff09; 3.1 哈希3.2 pow-pos-dpos3.3非對稱加密&#xff08;1&#xff09;對稱加密AES&#xff08;2&#xff09;非對稱加密RSA 3.4 拜占庭將軍3.5 P2P網絡3.6 區塊鏈 3.1 哈希 密碼學&#xff0c;區塊鏈的技術名詞 …

在Spring Boot項目中集成單點登錄解決方案

在Spring Boot項目中集成單點登錄解決方案 大家好&#xff0c;我是微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01; 在現代的企業應用中&#xff0c;單點登錄&#xff08;Single Sign-On, SSO&#xff09;解決方案是確保用戶…

【Git的基本操作】版本回退 | 撤銷修改的三種情況 | 刪除文件

目錄 5.版本回退 5.1選項hard&后悔藥 5.2后悔藥&commit id 5.3版本回退的原理 6.撤銷修改 6.1情況一 6.2情況二 6.3情況三 ?7.刪除文件 Git重要能力之一馬&#xff0c;版本回退功能。Git是版本控制系統&#xff0c;能夠管理文件歷史版本。本篇以ReadMe文件為…

神器!3個免費PPT成品網站推薦+3款AIPPT工具盤點!

熬夜加班做PPT卻沒有頭緒&#xff1f;別再自己憋著想了&#xff01;現在凡事主打一個“抄作業”&#xff0c;想做ppt卻沒想法&#xff0c;可以去到ppt成品網站搜集PPT模板&#xff0c;或是使用時下流行的AI生成PPT工具&#xff0c;只需輸入PPT主題&#xff0c;即可快速生成一份…

全網最詳細的CRC講解即計算

CRC 循環冗余碼&#xff08;Cyclic Redundancy Code&#xff0c; CRC&#xff09;是一種用于校驗通信鏈路上數字傳輸準確性的計算方法&#xff08;通過某種數學運算來建立數據位和校驗位(CRC)的約定關系的&#xff09;。它是利用除法以及余數的原理來作錯誤偵測。 發送方: 使用…

客戶關系管理怎么做?這4個工具一定要會用!

在商海浮沉中&#xff0c;每一位企業家和銷售經理都深知&#xff0c;客戶是企業生存與發展的基石。但如何有效管理這些寶貴的資源&#xff0c;讓每一次互動都成為加深關系、促進成交的契機&#xff0c;卻是一門藝術加科學的結合體。今天&#xff0c;咱們就來聊聊客戶關系管理&a…

3SRB5016-ASEMI逆變箱專用3SRB5016

編輯&#xff1a;ll 3SRB5016-ASEMI逆變箱專用3SRB5016 型號&#xff1a;3SRB5016 品牌&#xff1a;ASEMI 封裝&#xff1a;SGBJ-5 批號&#xff1a;2024 現貨&#xff1a;50000 最大重復峰值反向電壓&#xff1a;1600V 最大正向平均整流電流(Vdss)&#xff1a;50A 功…

CNN -1 神經網絡-概述

CNN -1 神經網絡-概述 一:芯片科技發展介紹了解1> 芯片科技發展趨勢2> 芯片使用領域3> 芯片介紹1. 神經網絡芯片2. 神經網絡處理單元NPU(Neural Processing Unit)二:神經網絡1> 什么是神經網絡2> 神經元3> 人工神經網絡三:卷積神經網絡(CNN)入門講解一…

【Spring】springSecurity使用

一、基本配置 1. 引入依賴 在Spring Boot項目中&#xff0c;使用Spring Security首先需要引入相應的依賴。在pom.xml中添加spring-boot-starter-security依賴&#xff1a; <dependency> <groupId>org.springframework.boot</groupId> <artifactId>…

Kodcloud可道云安裝與一鍵發布上線實現遠程訪問詳細教程

文章目錄 1.前言2. Kodcloud網站搭建2.1. Kodcloud下載和安裝2.2 Kodcloud網頁測試 3. cpolar內網穿透的安裝和注冊4. 本地網頁發布4.1 Cpolar云端設置4.2 Cpolar本地設置 5. 公網訪問測試6.結語 1.前言 本文主要為大家介紹一款國人自研的在線Web文件管理器可道云&#xff0c;…

唐劉:當 SaaS 愛上 TiDB(一)- 行業挑戰與 TiDB 的應對之道

導讀 在 TiDB 8.1 發布后&#xff0c;TiDB 展現了強大的支持 SaaS 業務的能力&#xff0c;成為 SaaS 業務數據庫的優先選擇之一。 本文為“當 SaaS 愛上 TiDB”系列文章的第一篇&#xff0c;系列文章將從技術原理和真實用戶體驗兩個角度深入探討 TiDB 在 SaaS 業務中的表現&a…