我有几个类:Array、Shape、Point。点是一种形状。
我创建了一个 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;
}
输出是(我对构造函数和析构函数有一些评论):
Array contructor call (default)
Shape contructor call (default)
Point contructor call (default)
002DDA20
Point destructor call
Shape destructor call
Array destructor call
我有点困惑,因为在我打印点之后似乎调用了析构函数,但它似乎只是打印内存地址而不是打印点。你能帮我理解吗?谢谢!
最佳答案
指针(大致)是一个内存位置,因此当您打印指针时,它就是您得到的。如果你想要那个内存位置的对象,你可以通过在前面放一个星号来取消引用它:
cout << *my_ShapeArray[0] << endl;
关于c++ - 学习使用 Boost 共享指针,控制台输出正确吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12739811/