源码

c – 在构造函数中抛出异常是否安全?


我知道从析构函数中抛出异常是不安全的,但是从构造函数中抛出异常是不安全的?

例如对于全局声明的对象会发生什么?用gcc进行快速测试,我得到了
一个中止,总能得到保证吗?你会用什么解决方案来迎合这种情况?

是否有任何情况下构造函数可以抛出异常而不是留下我们期望的东西.

编辑:我想我应该补充一点,我试图理解在什么情况下我可以获得资源泄漏.看起来明智的做法是手动释放我们在抛出异常之前通过构造获得的资源.我从来不需要在今天之前在构造函数中抛出异常,所以试图理解是否存在任何陷阱.

即,这也安全吗?

class P{
  public:
    P() { 
       // do stuff...

       if (error)
          throw exception
    }
}

dostuff(P *p){
 // do something with P
}

... 
try {
  dostuff(new P())
} catch(exception) {

}

分配给对象P的内存是否会被释放?

EDIT2:忘了提到在这种特殊情况下,dostuff将对P的引用存储在输出队列中. P实际上是一条消息,dostuff接收消息,将其路由到适当的输出队列并发送它.基本上,一旦dostuff持有它,它会在后来的dostuff内部释放.我想我想把一个autoptr放在P周围并在dostuff后调用autoptr上的释放以防止内存泄漏,这是正确的吗?

(0)

本文由 投稿者 创作,文章地址:https://blog.isoyu.com/archives/c-zaigouzaohanshuzhongpaochuyichangshifouanquan.html
采用知识共享署名4.0 国际许可协议进行许可。除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。最后编辑时间为:9 月 27, 2019 at 02:01 上午

热评文章