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

我创建了一个ShapePtr数组,并为第一个元素分配了一个Point。当我打印数组的第一个元素时,它只是显示一个奇怪的数字(我想是存储位置?)。这正常吗?有没有办法打印分配给该位置的点?还是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
  
  点析构函数调用
  
  形状析构函数调用
  
  数组析构函数调用


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

最佳答案

指针(大致)是一个内存位置,因此当您打印指针时,即会得到。如果您希望将对象放在该内存位置,请在其前面放一个星号以取消引用:

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

10-08 01:07