1. 程式人生 > >Boost庫學習筆記(二)- 智慧指標

Boost庫學習筆記(二)- 智慧指標

概述

1.智慧指標的原理基於一個常見的習語叫做 RAII :資源申請即初始化。
2.智慧指標確保在任何情況下,動態分配的記憶體都能得到正確釋放,從而將開發人員從這項任務中解放了出來。 這包括程式因為異常而中斷,原本用於釋放記憶體的程式碼被跳過的場景。
3.一個作用域指標不能傳遞它所包含的物件的所有權到另一個作用域指標
4.用一個動態分配的物件的地址來初始化智慧指標,在析構的時候釋放記憶體,就確保了這一點。 因為解構函式總是會被執行的,這樣所包含的記憶體也將總是會被釋放。

對boost手冊的補充示例

#include <iostream>
#include <boost/scoped_ptr.hpp>

class demo
{
public:
	int get() { return pt; }
	void set(int i) { pt = i; }
	~demo() { std::cout << "haha" << std::endl; }

private:
	int pt;
};

//可作為引數進行傳遞
void Func(int i, boost::scoped_ptr<demo>)
{

}
int main()
{
	/*實現方法: get(), reset(), swap()
	 *過載運算子: *, ->, 
	 */
	{
	//離開作用域後資源不被釋放
	demo *j = new demo;
	boost::scoped_ptr<demo> i(new demo);

	//本身值為1,但無實際意義
	std::cout << i << std::endl;
	//獲取儲存的類資源地址
	std::cout << "get: " << i.get() << std::endl;
	}

	return 0;
}