c++小技巧_析构

在看虚幻源码的时候发现的这个技巧,以前没用过。
利用对象的析构和栈中对象的释放。


函数调用中,函数中的临时对象都会放到栈中,等函数调用完后就释放掉这些临时对象。
所以,可以利用这个特点,在函数的最后处理某个逻辑而不需要关心该逻辑放在函数中的某个位置。


  • 虚幻中加载完地图发个消息就是这样干的
    这里写图片描述

  • 测试代码,Hell

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    void test() {
    LruMgr* lmgr = new LruMgr();
    TextureMgr* tmgr = new TextureMgr();
    tmgr->SetFilter(std::bind(&LruMgr::CaculFunc, lmgr, std::placeholders::_1, std::placeholders::_2));
    lmgr->SetRmCb(std::bind(&TextureMgr::Remove, tmgr, std::placeholders::_1));

    struct Hell{
    Hell() :num(123) {}
    ~Hell() { printf("--- ~Hell, num:%d", num); }
    int num;
    } tmphell;

    tmgr->AddObj("aaa");
    tmgr->AddObj("bbb");
    tmgr->AddObj("ccc");
    tmgr->AddObj("ddd");
    tmgr->AddObj("eee");
    tmgr->AddObj("fff");
    tmgr->AddObj("bbb");
    tmgr->AddObj("ddd");
    tmgr->AddObj("bbb");

    lmgr->Snapshot();
    delete lmgr;
    lmgr = nullptr;
    }
  • 结果
    这里写图片描述