C++基礎(chǔ)(C++指針的新需求)

字號:

指針使用中的根本問題:
    1. 內(nèi)存泄漏;
    2. 野指針(指針指向已經(jīng)被無效的內(nèi)存上);
    尤其是當多個指針指向同一個內(nèi)存區(qū)域的時候, 哪個指針來負責(zé)析構(gòu), 是最頭疼的事情了.
    針對這種情況, 應(yīng)該先引出指針的所有權(quán)問題:
    指針指向的內(nèi)存誰來釋放, 誰就是擁有所有權(quán).
    分三類情況:
    1. 一個指針有清晰的所有權(quán);
    2. 幾個指針共有所有權(quán);
    3. 一些指針只有引用權(quán);
    共享所有權(quán)指針的需求:
    ViSharePtr m_sp1 = new ViObj;
    m_sp2 = m_sp1;
    m_sp1 = NULL;//! 因為有其他人享有這個所有權(quán), 所以不能執(zhí)行析構(gòu)
    m_sp2;//! 還是有效的
    m_sp2 = NULL;//! 執(zhí)行析構(gòu)
    實現(xiàn)方式: 引用計數(shù)器
    引用型指針
    ViOwnPtr m_op = new ViObj;//! 所有權(quán)指針
    ViRefPtr m_rp = m_op;//! 引用指針
    delete m_op;
    assert(m_rp == NULL);//! 對象析構(gòu)之后, 所有引用指針置空;
    實現(xiàn)方式: 引用列表
    Tip:
    指針命名:
    1. _rp_ 引用指針
    2. _op_ 所有權(quán)指針
    3. _sp_ 共享指針
    引用型指針的使用范圍:
    回調(diào)對象;
    消息對象;
    持有指針狀態(tài)判斷;