警惕利用類的構造和析構函數來做資源分配釋放時候,對臨時變量的使用

有一個類

class CMiRegularPath
{
public:
    CMiRegularPath(LPCTSTR lpPath);
    ~CMiRegularPath();

    operator LPCTSTR ();
    operator LPTSTR();

protected:
    LPTSTR m_lpPathBuffer;
    LPCTSTR m_lpPath;
    LPCTSTR m_lpPathRegular;
};

下面是調用

void func1(LPTSTR lpPointer)
{

}

void func2(LPCTSTR lpPointer)
{

}

void test
{
    func1(CMiRegularPath(_T("D:\\aa/AS")));
    func2(CMiRegularPath(_T("D:\\aa/AS")));
    LPTSTR lpP1 = CMiRegularPath(_T("D:\\aa/AS"));
    LPCTSTR lpP2 = CMiRegularPath(_T("D:\\aa/AS"));
}

真相

test函數中前兩個調用是對的,在func1和func2中能得到正確的字符串,後兩個是錯誤的,執行完這一行後馬上就會執行類的析構函數,所以lpP1,lpP2不會指向真正的字符串。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章