#include <iostream>
#include <exception>
using namespace std;
class myexception: public exception
{
virtual const char* what() const throw()
{
return "My exception happened";
}
};
int main ()
{
try
{
myexception myex;
printf("addr1:%x\n",&myex);
throw myex;
}
catch (exception& e)
{
printf("addr2:%x\n",&e);
cout << e.what() << endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
addr1:6d78c020
addr2:20a1080
My exception happened
Run Code Online (Sandbox Code Playgroud)
问题:你看到addr1和addr2是不同的,任何想法为什么?
抛出异常时,会复制一个副本.您正在查看该副本的地址.
(处理程序的异常如何具有相同的地址?当你抛出时,你退出了包含异常的块,因此它不再存在.你无法访问不存在的东西.)
| 归档时间: |
|
| 查看次数: |
219 次 |
| 最近记录: |