学习使用Boost共享指针,控制台输出正确吗

Learning to use Boost Shared Pointers, Console Output Correct?

本文关键字:输出 控制台 指针 Boost 共享 学习      更新时间:2023-10-16

我有几个类:数组、形状、点。点是一种形状。

我创建了一个ShapePtr数组,并为第一个元素指定了一个点。当我打印数组的第一个元素时,它只显示一个奇怪的数字(我想是内存位置?)。这正常吗?有没有办法打印分配给该位置的点?还是Point已经被摧毁了?我的主要内容如下:

{   
// Typedef for a shared pointer to shape
typedef boost::shared_ptr<Shape> ShapePtr;
// a typedef for an array with shapes stored as shared pointers.
typedef Array<ShapePtr> ShapeArray;
ShapeArray my_ShapeArray;
ShapePtr my_Point (new Point(3.1459));
my_ShapeArray[0] = my_Point;
cout  << my_ShapeArray[0] << endl;
return 0;
}

输出是(我对构造函数和析构函数有一些评论):

阵列控制器调用(默认)

形状生成器调用(默认)

点控制器调用(默认)

002DDA20

点析构函数调用

形状析构函数调用

数组析构函数调用

我有点困惑,因为在打印点之后似乎会调用析构函数,但它似乎只是打印内存地址,而不是打印点。你能帮我理解吗?谢谢

指针(大致上)是一个内存位置,所以当您打印指针时,就会得到它。如果你想把对象放在那个内存位置,你可以在前面放一个星号来取消引用:

cout  << *my_ShapeArray[0] << endl;