我們知道c++標準庫中定義了智慧型指標auto_ptr,但是我們很少用它,因為雖然它能夠自動**動態開闢的記憶體,不需要程式設計師自己去維護動態開闢的記憶體,但是當用它去賦值或者是拷貝構造時有乙個管理權轉移的過程,這樣我們就不能很方便的使用auto_ptr。
下面是簡單的auto_ptr的實現,我們可以看到在複製和賦值時它將轉移管理權。
templateclass autoptr
~autoptr()
}autoptr(autoptr& ap)
:_ptr(ap._ptr)
autoptr& operator=(autoptr& ap)
return *this;
}t& operator*()
t* operator->()
private:
t* _ptr;
};
我們知道,boost庫中也有智慧型指標,它們的實現方式與c++標準庫中的不同。
scoped_ptr,scoped_array是用很簡單粗暴(防拷貝)地方式實現的智慧型指標,它不允許使用者對該物件進行複製和賦值。下面是它們的實現方式:
templateclass scopedptr
~scopedptr()
}t* operator->()
t& operator*()
protected:
scopedptr(scopedptr& sp);//只宣告不實現,並且宣告為私有,防止其他人實現並呼叫
scopedptr& operator=(scopedptr& sp);//只宣告不實現,並且宣告為私有,防止其他人實現並呼叫
private:
t* _ptr;};
templateclass scopedarray
~scopedarray()
}t& operator(int index)
protected:
scopedarray(scopedarray& sparr);
scopedarray& operator=(scopedarray& sparr);
private:
t* _ptr;
};
boost庫中的shared_ptr,shared_array是用乙個指標和乙個引用計數來管理動態開闢的記憶體,在動態開闢一塊空間的同時開闢一塊可以儲存引用計數的大小的空間進行引用計數,記錄這塊空間被引用的次數。
與auto_ptr不同,可允許多個指標管理統一空空間。
templateclass sharedptr
sharedptr(const sharedptr& sp)
:_ptr(sp._ptr)
, _pcount(sp._pcount)
/*sharedptr& operator=(const sharedptr& sp)//傳統的賦值方法
return *this;
}*/sharedptr& operator=(sharedptrsp)//現代的賦值方法
~sharedptr()
long usecount()
t* operator->()
t& operator*()
protected:
void release()
}private:
t* _ptr;
long* _pcount;//引用計數器};
templateclass sharedarray
~sharedarray()
sharedarray(const sharedarray& sparr)
:_ptr(sparr._ptr)
,_pcount(sparr._pcount)
/*sharedarray& operator=(sharedarraysparr)
*/sharedarray& operator=(const sharedarray& sparr)
return *this;
}t& operator(int index)
private:
void release()
}private:
t* _ptr;
long* _pcount;
};
模擬實現C庫的atoi和itoa
1 c庫的atoi的模擬實現 atoi的作用就是將字串轉為整形,它的介面函式是 int atoi const char str 要模擬實現c庫的atoi函式需要考慮以下幾種特殊情況 1 空串,返回0 2 是否存在空格,如果全部是空格呢?全部是空格,返回0 3 是否存在符號位 4 符號位之後是否是全0...
模擬實現Boost庫中的智慧型指標 上
智慧型指標 英語 smart pointer 是一種抽象的資料型別。在程式設計中,它通常是經由類模板 class template 來實做,藉由模板 template 來達成泛型,通常藉由類 class 的析構函式來達成自動釋放指標所指向的儲存器或物件。起初在c 標準庫裡面是沒有智慧型指標的,直到c...
準標準庫Boost
在c 中,庫的地位是非常高的。c 之父 bjarne stroustrup先生多次表示了設計庫來擴充功能要好過設計更多的語法的言論。現實中,c 的庫門類繁多,解決的問題也是極其廣泛,庫從輕量級到重量級的都有。不少都是讓人眼界大開,亦或是望而生嘆的思維傑作。由於庫的數量非常龐大,而且限於筆者水平,其中...