为什么在下面的例子中抛出异常时,pb指向的Shape被销毁
Why the Shape pointed by pb is destroyed when an exception is thrown in the example below?
这个例子取自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();
/ / ...
}
此处删除了矩形、pb指向的形状和pc指向的圆无论是否引发异常。"
它被销毁了,因为auto_ptr
就是这么做的。它在其析构函数中销毁指向的对象,并且在auto_ptr
离开作用域时调用析构函数,无论是否引发异常。C++就是这样工作的。
在内部,auto_ptr
本质上是(仅相关位):
template <typename T>
struct auto_ptr
{
auto_ptr(T* ptr) : m_ptr(ptr) {}
~auto_ptr() { delete m_ptr; }
private:
T* m_ptr;
};
相关文章:
- 如何使用CMake编译.proto文件来生成.grpcp.pb.cc和.grpc.pb.h文件
- OpenCV 3.4.1 error readNetFromTensorflow 无法在 cv::d nn::ReadProtoFromBinaryFile 中打开 .pb
- 构建 TensorFlow r1.14 C++文件时缺少文件"tensorflow/core/framework/types.pb.h"
- 从keras保存.pb和.pbtxt文件
- C++ "'Shape': cannot instantiate abstract class"找不到问题的根源
- 对c++中使用的keras.h5模型到.pb模型进行了微调,给出了运行模型失败的错误
- 在c++中从包含新操作的python中创建的pb图创建图
- 不理解将 .pb 转换为 ff-lite 时的平均值和标准开发值
- Protobuf:无法在 message.pb.h 文件中打开包含文件 common.h
- 如何从TensorFlow .pb模型中获取权重格式?
- 错误:"类 std::vector<Shape*>"没有名为"sort"的成员
- 虚拟函数"Shape"分配
- 无法使用 'Shape *' 类型的左值初始化类型 'Shape Shape::*' 的返回对象
- dynamic_cast<D *>(pb) 返回空值
- 使用 std::vector 时抽象类类型"Shape"的新表达式无效错误
- 为什么pA,pB,pC不相等
- 建筑x86_64的未定义符号:"Shape::get_area()",引用自:Shape.o 中的形状可投票。
- C++类 Shape 没有名为 set_values 的成员
- 不理解 Stroustup 先生的建议,删除复制默认值并为抽象类 Shape 移动操作
- 为什么在下面的例子中抛出异常时,pb指向的Shape被销毁