程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> boost庫在工作引用計數的智能指針shared_ptr之一

boost庫在工作引用計數的智能指針shared_ptr之一

編輯:C++入門知識

在前面已經介紹了三個智能指針,它們都是適合在局部作用域,不進行拷貝的情況下使用,最為合適,如果使用到其它情況,使用的好處跟壞處一樣多,這種情況就不宜使用了。在目前多核處理器流行的今天,並發處理已經成為常事,因為多線程運行的高效性,界面操作人性化方面,都需要並發性處理。比如界面需要一直響應用戶的操作,但後台的任務又需要有序地進行,只能阻塞在那裡。這時,如果使用單線程,就顯然人機操作界面不好了。在采用多線程編程的情況之下,經常會有這種需求,比如當從界面線程T創建一個對象A,然後線程T1和線程T2使用,但又想這個對象A不在界面線程T裡刪除,而由線程T1或T2來刪除。也就是說當線程T1和T2都不再使用時就需要及時刪除對象A。在這種情況之下,很難知道讓線程T1來刪除,還是讓線程T2來刪除。因為線程是處理器調度時的最小單位,每個線程運行多長時間,多少行代碼是不確定的。那麼有什麼辦法可以讓線程T1和線程T2都不使用對象A時,就立即刪除呢?當然可以使用線程互斥對象來相互通知是可以達到的,但還有沒有更簡單的方法呢?很久以前,人們就發現使用對象引用計數技術,就可以達到開銷更小,又可以在對象不使用時及時刪除對象,釋放資源出來。使用引用計數時,只需要多核心處理器在運行一條指令處阻塞,而其它時間就可以並發地執行指令,從而達到多核心處理器最大化地並發運行。 對象引用計數的技術,在使用方面又存在兩種方式,一種方式是創建一個基類,在基類裡實現引用計數的操作,這樣在派生類裡就可以引用計數的保存和操作了。另外一種方式是引入第三個類,一個是操作對象的類,一個是引用計數的類,一個是把操作對象和引用計數的類組合在一起的類。這兩種方式進行比較,繼承的方式耦合程度要高一些,而采用組合方式復用性要好一些。因此在boost庫裡的實現就是采用第二種方式來進行的,這樣就可以更適用於多種情況之下。 在boost庫裡引入了對象引用計數管理技術的模板類shared_ptr,這個智能指針是重量級的實現,不但可以拷貝,還可以比較指針,是跟原始指針最相似的智能指針。由於這些特性,這個智能指針是可以使用到STL裡的容器類裡,而不像前面幾個智能指針那樣,不具備這樣的特性。   智能指針shared_ptr簡單的使用如下: [cpp]   // boost_004.cpp : Defines the entry point for the console application.   //      #include "stdafx.h"   #include <memory.h>   #include <iostream>   #include <boost/shared_ptr.hpp>      //使用shared_ptr   //軟件開發人員: 蔡軍生  2013-02-09   void TestSharedPtr(void)   {       //一般指針操作       boost::shared_ptr< int > pFirst(new int);       *pFirst = 100;       std::cout << *pFirst << std::endl;          pFirst.reset(new int);   }    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved