【发布时间】:2012-08-08 01:33:12
【问题描述】:
unique_ptr<X> f()
{
unique_ptr<X> p(new X); // or {new X} but not = new X
// do something - maybe throw an exception
return p; // the ownership is transferred out of f()
}
当异常被抛出时,为什么我们关心对象 X 的存在, 为什么我们关心它占用的内存?
处理完异常后,进程将很快终止, 并且内存会被释放,为什么我们关心这个?
【问题讨论】:
-
因为有时候人们真正关心的是保证他们的节目质量,而不是找借口。 :)你怎么知道异常期间会发生什么?只有捕手知道。也许我抓住它,记录它,然后沿着另一条路继续前进。或者可能不是。为什么要猜测?
-
@GManNickG 如果我在我的软件中根本不使用异常,这是否意味着我不需要智能指针和 RAII?
-
如果不使用异常意味着编译器在语言级别禁用了它们(也就是说,您使用的不是 C++,而是 C++-无异常),那么这是部分正确的。 RAII 对于自动化内存使用和建模转换仍然很有用(比较使用和不使用
shared_ptr的引用计数是多么容易)。如果您的意思是 您 不使用异常,但它们仍然启用,那么您仍然只是在使用异常。例如new int可以抛出。