1. 程式人生 > >boost庫在工作(1) 使用陣列智慧指標scoped_array

boost庫在工作(1) 使用陣列智慧指標scoped_array

C++裡陣列指標與一般的指標是有區別的。比如使用陣列形式分配的記憶體,就需要使用陣列的形式刪除。但初學開發的開發人員,往往會忘記這點,在我過去10多年的軟體程式碼審查過程裡,經常發現這點,如下面所示:
char*  pBuf = new char[256];
......這裡使用
delete pBuf; 
在最後這行程式碼上,就使用出錯了。應該使用陣列的形式刪除,否則只刪除了一個元素佔用的記憶體,其它所有佔用的記憶體就變成記憶體洩漏了。為了避免這種情況,有什麼好方法嗎?在STL庫裡沒有提供比較好的智慧指標,現在boost庫提供了這種智慧指標了,它就是scoped_array。希望所有分配陣列的記憶體,都使用這種方式來分配,不但可以避免刪除時出錯,也可以防止記憶體洩漏,提供更加安全的機制。

scoped_array很像scoped_ptr, 它包裝了new[]操作符。

<span style="font-size:12px;">#include <boost/scoped_array.hpp>

char *get(const char *s)
{

       int size = std::strlen(s);

       boost::scoped_array<char> s(new char[size]);

       std::strncpy(text, s, size + 1); 

  	return text; 

}

</span>
<span style="font-size:12px;">#include "boost/smart_ptr.hpp"
using namespace boost;

int _tmain(int argc, _TCHAR* argv[])
{
	//scoped_array包裝了new[]操作符(不是單純的new)在堆上分配的動態陣列
	scoped_array<int> sa(new int[1000]);  //delete可以不要了,進而避免程式在delete呼叫之前退出導致的記憶體未釋放。
	return 0;
}

</span>

參考: