美文网首页
返回值为对象引用时的注意事项

返回值为对象引用时的注意事项

作者: xiaoliang1 | 来源:发表于2020-06-26 16:05 被阅读0次
    MyException& test5() {
    
        MyException* p1 = new MyException(10);
    
        
        printf("p: %x\n", p1);
        return *p1;
    }
    
    void test6() {
    
        MyException p = test5();
        printf("p: %x\n", &p);
    }
    
    int main()
    {
        test6();
        return EXIT_SUCCESS;
    }
    

    代码如上,当返回值为应用时,这中写法会发生对象copy构造,从而发生内存泄漏

    
    __thiscall MyException::MyException(int)
    p: a7f4c0
    __thiscall MyException::MyException(const class MyException &)
    p: 39fbbc
    __thiscall MyException::~MyException(void)
    
    C:\Users\admin\source\repos\异常捕获\Debug\异常捕获.exe (进程 10316)已退出,代码
    为 0。
    要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自
    动关闭控制台”。
    按任意键关闭此窗口. . .
    

    对象在堆区时,千万不要返回引用

    相关文章

      网友评论

          本文标题:返回值为对象引用时的注意事项

          本文链接:https://www.haomeiwen.com/subject/slrufktx.html