【发布时间】:2012-10-05 05:05:32
【问题描述】:
我有几个类: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;
}
输出是(我有一些用于构造函数和析构函数的 cmets):
数组构造函数调用(默认)
形状构造函数调用(默认)
点构造函数调用(默认)
002DDA20
点析构函数调用
形状析构函数调用
数组析构函数调用
我有点困惑,因为似乎在我打印点之后调用了析构函数,但不是打印点,它似乎只是打印内存地址。你能帮我理解吗?谢谢!
【问题讨论】:
-
尝试解引用运算符
*。*(my_ShapeArray[0]) -
在这种情况下也更喜欢使用“make_shared”。即“ShapePtr my_Point = boost::make_shared( 3.1459 )”,因为它可以提高内存效率。 (假设 Point 派生自 Shape)
标签: c++ arrays pointers boost shared-ptr