日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
C++指針說明管理

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

創(chuàng)新互聯(lián)專注于企業(yè)成都營銷網(wǎng)站建設、網(wǎng)站重做改版、南通網(wǎng)站定制設計、自適應品牌網(wǎng)站建設、H5場景定制、商城開發(fā)、集團公司官網(wǎng)建設、成都外貿網(wǎng)站制作、高端網(wǎng)站制作、響應式網(wǎng)頁設計等建站業(yè)務,價格優(yōu)惠性價比高,為南通等各大城市提供網(wǎng)站開發(fā)制作服務。

對于給定的資源的擁有著,是負責釋放資源的一個對象或者是一段代碼。所有權分立為兩種級別--自動的和顯式的(automatic and explicit),如果一個對象的釋放是由語言本身的機制來保證的,這個對象的就是被自動地所有。

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

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

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

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

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

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

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

下面是資源封裝的一個經(jīng)典例子。在一個多線程的應用程序中,線程之間共享對象的問題是通過用這樣一個對象聯(lián)系臨界區(qū)來解決的。每一個需要訪問共享資源的客戶需要獲得臨界區(qū)。例如,這可能是Win32下臨界區(qū)的實現(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.   };

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


網(wǎng)頁標題:C++指針說明管理
文章起源:http://m.5511xx.com/article/cdepdhi.html