peerconnection例子關閉窗口
阿新 • • 發佈:2017-06-13
base line fault 關閉窗口 模板類 技術分享 分享 獲取 lin
在\trunk\talk\base\scoped_ptr.h文件中的scoped_ptr_impl模板類的reset方法,由於scoped_ptr_impl類的內部定義結構體Data繼承自類模板參數D(代表的是指針析構類),並聲明成員變量Data data_;Data data_;當調用reset方法時重新賦值指針,先獲取到原始指針T* old = data_.ptr;然後如果該指針非空則執行static_cast<D&>(data_)(old);該語句首先將成員變量轉換成父類的引用,然後將原始指針作為參數調用其重載的()成員函數。
以其中一個scoped_ptr為例,該模板類第一個類模板參數為T,第二個類模板參數為默認參數talk_base::DefaultDeleter<T>,DefaultDeleter是一個定義在當前文件的模板類或者模板結構體,從名字可知為析構類,以模板類scoped_ptr中定義的成員變量talk_base::internal::scoped_ptr_impl<element_type, deleter_type> impl_;為例,使用的是template <class T> struct DefaultDeleter模板而非其他兩個重載的DefaultDeleter,而這個模板又傳遞給talk_base::internal::scoped_ptr_impl模板類成為其第二個類模板參數,由上分析該模板類型會是scoped_ptr_impl內部定義的結構體Data的父類,而且scoped_ptr_impl模板類的reset方法中執行用static_cast<D&>(data_)(old);時即template <class T> struct DefaultDeleter類的inline void operator()(T* ptr) const方法,該方法中執行delete ptr;即class scoped_ptr模板類的第一個類模板參數的析構函數。peerconnection例子關閉窗口