这个例子取自 Stroustup 的书,第三版,第 14.4.2 节:
void f (Point p1, Point p2, auto_ptr<Circle> pc, Shape* pb)
{
auto_ptr<Shape> p (new Rectangle(p1 ,p2));
auto_ptr<Shape> pbox(pb);
p->rotate(45);
/ / ...
if (in_a_mess ) throw Mess();
/ / ...
}
“这里的Rectangle,pb指向的Shape,pc指向的Circle,不管是否抛出异常,都被删除了。”