偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

C++指針說明管理

開發(fā) 后端
下面進(jìn)行著重說明C++中的C++指針問題,所謂C++指針:指針一般指向一個(gè)函數(shù)或一個(gè)變量,在使用時(shí),一個(gè)應(yīng)用程序可以直接使用這個(gè)指針?biāo)鶅?chǔ)存的內(nèi)存地址。

C++語言發(fā)展到今天,依靠著C++自身的自由性,很大部分還體現(xiàn)在其靈活的C++指針運(yùn)用上,從最初的pascal發(fā)展至今的object pascal,C++在指針的運(yùn)用上,絕不遜色于C語言的指針。

對(duì)于給定的資源的擁有著,是負(fù)責(zé)釋放資源的一個(gè)對(duì)象或者是一段代碼。所有權(quán)分立為兩種級(jí)別--自動(dòng)的和顯式的(automatic and explicit),如果一個(gè)對(duì)象的釋放是由語言本身的機(jī)制來保證的,這個(gè)對(duì)象的就是被自動(dòng)地所有。

例如,一個(gè)嵌入在其他對(duì)象中的對(duì)象,他的清除需要其他對(duì)象來在清除的時(shí)候保證。外面的對(duì)象被看作嵌入類的所有者。類似地,每個(gè)在棧上創(chuàng)建的對(duì)象(作為自動(dòng)變量)的釋放(破壞)是在控制流離開了對(duì)象被定義的作用域的時(shí)候保證的。

這種情況下,作用于被看作是對(duì)象的所有者。注意所有的自動(dòng)所有權(quán)都是和語言的其他機(jī)制相容的,包括異常。無論是如何退出作用域的--正常流程控制退出、一個(gè)break語句、一個(gè)return、一個(gè)goto、或者是一個(gè)throw--自動(dòng)資源都可以被清除。

到目前為止,一切都很好!問題是在引入指針、句柄和抽象的時(shí)候產(chǎn)生的。如果通過一個(gè)C++指針訪問一個(gè)對(duì)象的話,比如對(duì)象在堆中分配,C++不自動(dòng)地關(guān)注它的釋放。程序員必須明確的用適當(dāng)?shù)某绦蚍椒▉磲尫胚@些資源。比如說。#t#

如果一個(gè)對(duì)象是通過調(diào)用new來創(chuàng)建的,它需要用delete來回收。一個(gè)文件是用CreateFile(Win32 API)打開的,它需要用CloseHandle來關(guān)閉。

用EnterCritialSection進(jìn)入的臨界區(qū)(Critical Section)需要LeaveCriticalSection退出,等等。一個(gè)"裸"C++指針,文件句柄,或者臨界區(qū)狀態(tài)沒有所有者來確保它們的最終釋放。基本的資源管理的前提就是確保每個(gè)資源都有他們的所有者。

一個(gè)C++指針,一個(gè)句柄,一個(gè)臨界區(qū)狀態(tài)只有在我們將它們封裝入對(duì)象的時(shí)候才會(huì)擁有所有者。這就是我們的第一規(guī)則:在構(gòu)造函數(shù)中分配資源,在析構(gòu)函數(shù)中釋放資源。當(dāng)你按照規(guī)則將所有資源封裝的時(shí)候,你可以保證你的程序中沒有任何的資源泄露。這點(diǎn)在當(dāng)封裝對(duì)象(Encapsulating Object)在棧中建立或者嵌入在其他的對(duì)象中的時(shí)候非常明顯。但是對(duì)那些動(dòng)態(tài)申請(qǐng)的對(duì)象呢?

不要急!任何動(dòng)態(tài)申請(qǐng)的東西都被看作一種資源,并且要按照上面提到的方法進(jìn)行封裝。這一對(duì)象封裝對(duì)象的鏈不得不在某個(gè)地方終止。它最終終止在最高級(jí)的所有者,自動(dòng)的或者是靜態(tài)的。這些分別是對(duì)離開作用域或者程序時(shí)釋放資源的保證。

下面是資源封裝的一個(gè)經(jīng)典例子。在一個(gè)多線程的應(yīng)用程序中,線程之間共享對(duì)象的問題是通過用這樣一個(gè)對(duì)象聯(lián)系臨界區(qū)來解決的。每一個(gè)需要訪問共享資源的客戶需要獲得臨界區(qū)。例如,這可能是Win32下臨界區(qū)的實(shí)現(xiàn)方法

  1. class CritSect  
  2.   {  
  3.   friend class Lock;  
  4.   public:  
  5.   CritSect () { InitializeCriticalSection (&_critSection); }  
  6.   ~CritSect () { DeleteCriticalSection (&_critSection); }  
  7.   private  
  8.   void Acquire ()  
  9.   {  
  10.   EnterCriticalSection (&_critSection);  
  11.   }  
  12.   void Release ()  
  13.   {  
  14.   LeaveCriticalSection (&_critSection);  
  15.   }  
  16.   CRITICAL_SECTION _critSection;  
  17.   }; 

這里聰明的部分是我們確保每一個(gè)進(jìn)入臨界區(qū)的客戶最后都可以離開。"進(jìn)入"臨界區(qū)的狀態(tài)是一種資源,并應(yīng)當(dāng)被封裝。封裝器通常被稱作一個(gè)鎖(lock)。

責(zé)任編輯:chenqingxiang 來源: CSDN
相關(guān)推薦

2010-01-18 15:53:27

C++析構(gòu)函數(shù)

2021-12-21 15:31:10

C++語言指針

2011-04-11 11:09:50

this指針

2010-01-14 17:42:47

CC++

2010-01-26 10:42:26

C++函數(shù)

2010-01-25 10:54:18

C++設(shè)計(jì)

2010-01-26 13:36:27

C++設(shè)計(jì)

2014-01-24 09:49:01

C++指針

2021-10-27 16:27:20

C++指針操控

2021-06-10 08:51:57

C++指針聲明指針相關(guān)概念

2010-01-28 13:57:19

C++指針基礎(chǔ)

2024-05-15 16:01:04

C++編程開發(fā)

2024-12-26 10:45:08

2010-01-19 13:43:59

C++函數(shù)

2010-01-28 11:08:09

C++變量

2010-01-28 13:27:12

C++類定義

2010-01-25 18:19:17

C++特性

2010-01-27 10:22:53

C++基類

2010-01-21 15:07:31

C++開發(fā)

2010-01-19 17:54:47

C++程序
點(diǎn)贊
收藏

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