成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

簡單介紹C++ RAII

開發(fā) 后端
這里介紹C++ RAII,C#和C++兩門語言的定位不同,它們在資源管理方面采取了兩種截然不同的方式:一為GC,一為RAII。

在C語言中,資源管理是一個極為繁瑣易錯的工作,大多復(fù)雜的C系統(tǒng)都面臨著內(nèi)存泄露、懸掛指針等問題。這是一方面是由底層語言的特點決定;另一方面也是由于C語言特性相對較少,嚴重依賴程序員進行正確的資源管理,缺乏有效的支持手段。

C#和C++兩門語言的定位不同,它們在資源管理方面采取了兩種截然不同的方式:一為GC,一為RAII。GC讓程序建立在更高的抽象層次上,使資源管理變得更方便,更安全;而C++ RAII則保留了C的底層能力,同時在C++特性的支持下提供了簡單有效的資源管理方式。我們知道C++最激烈的批評往往來自于C社區(qū),而在我看來C程序員可以不接受虛函數(shù),不接受模板,但有什么理由不接受RAII呢?可以說RAII是C++相對C來說幾乎無副作用的明顯進步。

C++ RAII

RAII是resource acquisition is initialization的縮寫,意為“資源獲取即初始化”。它是C++之父Bjarne Stroustrup提出的設(shè)計理念,其核心是把資源和對象的生命周期綁定,對象創(chuàng)建獲取資源,對象銷毀釋放資源。在RAII的指導(dǎo)下,C++把底層的資源管理問題提升到了對象生命周期管理的更高層次。上面的例子,我們把new所獲取的內(nèi)存塊視為資源,把r對象視為資源的代理對象,r應(yīng)負責(zé)資源的獲取和釋放。在棧語義和操作符重載的支持下,C++ RAII體現(xiàn)出了簡潔、安全、實時的特點:

1.概念簡潔性:讓資源(包括內(nèi)存和非內(nèi)存資源)和對象的生命周期綁定,資源類的設(shè)計者只需用在類定義內(nèi)部處理資源問題,提高了程序的可維護性

2.類型安全性:通過資源代理對象包裝資源(指針變量),并利用運算符重載提供指針運算方便使用,但對外暴露類型安全的接口

3.異常安全性:棧語義保證對象析構(gòu)函數(shù)的調(diào)用,提高了程序的健壯性

4.釋放實時性:和GC相比,RAII達到了和手動釋放資源一樣的實時性,因此可以承擔(dān)底層開發(fā)的重任

也許你還在驚訝RAII如此簡單的時候,關(guān)于RAII的主要內(nèi)容已經(jīng)介紹完了。簡單不意味著簡陋,在我看來RAII雖然不像GC一樣,是一套具體的機制,但它蘊含的對象與資源關(guān)系的哲學(xué)深度的理解卻使得我對Bjarne Stroustrup肅然起敬!

最后,不得不提醒RAII的理念固然簡單,不過在具體實現(xiàn)的時候仍有需要小心的地方。比如對于STL的auto_ptr,可以視為資源的代理對象,auto_ptr對象間的賦值是一個需要特別注意的地方。簡單說來資源代理對象間賦值的語義不滿足“賦值相等”,其語義是資源管理權(quán)的轉(zhuǎn)移。

什么是“賦值相等”呢?比如:

  1. int a;  
  2. int b = 10;  
  3. a = b; //這句話執(zhí)行后 a == b 

但對于資源代理對象,這是不滿足的,比如:

  1. auto_ptr<int> a(null);  
  2. auto_ptr<int> b(new int(123));  
  3. a = b; //這句話執(zhí)行后a != b,賦值的語義是b把資源的管理權(quán)交給了a 

【編輯推薦】

  1. C#局部類型介紹
  2. C#固定指針簡單介紹
  3. 淺析C# FTP WebRequest對象
  4. C#分部方法的應(yīng)用場景
  5. 簡單介紹VB.NET和C#
責(zé)任編輯:佚名 來源: 博客園
相關(guān)推薦

2025-02-18 00:08:00

代碼C++RAII

2009-08-25 14:42:41

由C++轉(zhuǎn)向C#

2010-02-01 17:19:30

C++運行機制

2011-06-09 15:04:22

RAII機制

2010-02-07 14:17:45

Ubuntu8.10

2009-08-19 13:36:21

C++資源管理方式

2023-12-20 12:40:51

C++RAII編程

2024-03-04 10:53:08

RAIIC++開發(fā)

2010-01-15 15:52:18

CC++

2010-01-15 10:41:06

CC++

2010-01-26 10:27:43

C++語言

2021-06-09 09:49:35

C++RAII語言

2009-08-19 10:09:21

C#和C++

2010-01-18 10:16:58

學(xué)習(xí)C++

2010-01-25 18:19:17

C++特性

2010-02-03 16:35:45

C++回文

2010-01-19 17:54:47

C++程序

2010-01-25 17:55:38

C++頭文件

2010-01-25 18:19:17

C++特性

2010-01-25 18:19:17

C++特性
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 精品久久久久久久久久久院品网 | 国产一区二区三区在线 | 99re免费 | 粉嫩一区二区三区四区公司1 | 日韩成人免费在线视频 | 国产色婷婷精品综合在线手机播放 | 午夜色婷婷 | 亚洲免费人成在线视频观看 | 国产欧美一区二区三区另类精品 | 国产免费又色又爽又黄在线观看 | 国产精品国产三级国产aⅴ原创 | 围产精品久久久久久久 | 国产高清在线观看 | 涩涩视频网 | 在线观看视频h | 一区二区av在线 | 台湾佬伊人| 久久宗合色 | 欧美国产日韩在线 | 日韩国产欧美一区 | 国产成都精品91一区二区三 | 国产亚洲精品成人av久久ww | 国产精品久久久久久久久久免费看 | 久久精品中文字幕 | 精品一二区 | 先锋资源网站 | 久久夜视频 | 色播99| 97色在线视频 | 99久久国产免费 | 国产精品视频999 | 一级片免费视频 | 久久er精品 | 国产精品成人一区二区 | 在线观看免费毛片 | 亚洲国产成人av | 91观看| 在线日韩 | 国产分类视频 | 国产精品美女久久久久久免费 | 2一3sex性hd|