警惕利用类的构造和析构函数来做资源分配释放时候,对临时变量的使用

17 篇文章 0 订阅

有一个类

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不会指向真正的字符串。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值