zoukankan      html  css  js  c++  java
  • [转]IUnkown生命周期管理

     

    以下内容摘自com本质论

    1.公理

    1.当一个非空的接口指针从一个内存位置被拷贝到另一个内存位置时,应该要调用Addref,以便通知对象又有附加的引用发生了

    2.对于已经包含非空接口指的内存位置来说,在重定该内存位置之前,必须要先调用Release,以便通知对象"这个引用已经被销毁了"

    3.如果你对两个或者多个内存位置之间的关系有特殊理解的话,那么多余的AddRef,

    Release调用可以被优化掉

    2.情形模拟

    2.1通用的AddRef情形

    A1.当把一个非空接口指针写到局部变量中时

    A2.当被调用方把一个非空接口指针写到方法或者函数的[out] 或[in,out]参数中时

    A3.当被调用方返回一个非空接口指针作为函数的实际结果时

    A4.当把一个非空接口指针写到对象的一个数据成员中时

    2.2通用的Release情形

    R1.在改写一个非空局部变量或者数据成员之前

    R2.在离开非空局部变量的作用域之前

    R3.当被调用方要改写方法或者函数的[in,out]参数,并且参数的初始值为非空时.注意,[out]参数往往被假定"输入时为空值",所以被调用方永远也不必释放[out]参数.

    R4.在改写一个对象的非空数据成员之前.

    R5.在离开一个对象的析构函数之前,并且这时还有一个非空指针作为数据成员时

    2.3

    S1.当调用方把一个非空接口指针通过[in]参数传给一个函数或者方法时,既不需要调用AddRef,也不需要用Release,因为在调用堆栈中,临时变量的生命周期只是"用于初始化形式参数"的表达式的生命周期的一个子集

  • 相关阅读:
    HGOI20180822 五校联考卷
    HGOI20180817 (NOIP模拟Day1 task)
    HGOI2010816 (NOIP 提高组模拟赛 day1)
    HGOI20180815 (NOIP 提高组模拟赛 day2)
    HGOI20180814 (NOIP 模拟Day1)
    HGOI20180813 (NOIP2018 提高组 Day2 模拟试题)
    小工具
    HGOI20180812 (NOIP2018 提高组 Day1 模拟试题)
    浅谈高斯消元
    浅谈线性基
  • 原文地址:https://www.cnblogs.com/foxhengxing/p/1836929.html
Copyright © 2011-2022 走看看