Dav*_*yan 0 c++ exception-handling exception new-operator
假设我们有这样的情况.假设不是"p =&global;"而是 我们调用了一些函数(由某人编写,使我们的指针无效).怎么处理这个问题?如何保护代码免受崩溃?我知道并使用boost智能指针.但是如果我们遇到这种情况该怎么办
struct Test
{
int a;
int b;
int c;
};
Test global;
int main()
{
Test *p = new Test;
p->a = 1;
p->b = 2;
p->c = 3;
p = &global;
delete p;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
没有.如果你这样做,那么你得到你得到的.不要这样做.
重新分配后p,泄漏最初指向的Test对象p.你现在已经在这个应用程序的运行时间内丢失了内存.然后,当您删除非堆对象时,您将遇到未定义的行为,并且任何事情都可能发生(通常运行时库将崩溃尝试删除非堆内存 - 但您无法保证).一旦你试图删除非堆内存,你就无法做到可靠.
您已经提到了智能指针,这是解决方案的一部分.另一部分只是小心.
| 归档时间: |
|
| 查看次数: |
349 次 |
| 最近记录: |