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。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自
动关闭控制台”。
按任意键关闭此窗口. . .
对象在堆区时,千万不要返回引用
网友评论