zoukankan      html  css  js  c++  java
  • peerconnection例子关闭窗口

          在 runk alkasescoped_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模板类的第一个类模板参数的析构函数。 
  • 相关阅读:
    arm基础
    数据的封装
    网络安全基础
    qt5学习笔记
    nginx修改配置
    proteus_base1
    20191022
    20191015
    20191014
    20191013
  • 原文地址:https://www.cnblogs.com/wongdu2014/p/7003049.html
Copyright © 2011-2022 走看看