C++ 学习使用Boost共享指针,控制台输出正确吗?
我有几个类:数组、形状、点。点是一种形状 我已经创建了一个ShapePtr数组,并为第一个元素指定了一个点。当我打印数组的第一个元素时,它只显示一个奇怪的数字(我想是内存位置?)。这正常吗?有没有办法打印指定给该位置的点?还是该点已经被破坏了?我的主要意见如下:C++ 学习使用Boost共享指针,控制台输出正确吗?,c++,arrays,pointers,boost,shared-ptr,C++,Arrays,Pointers,Boost,Shared Ptr,我有几个类:数组、形状、点。点是一种形状 我已经创建了一个ShapePtr数组,并为第一个元素指定了一个点。当我打印数组的第一个元素时,它只显示一个奇怪的数字(我想是内存位置?)。这正常吗?有没有办法打印指定给该位置的点?还是该点已经被破坏了?我的主要意见如下: { // Typedef for a shared pointer to shape typedef boost::shared_ptr<Shape> ShapePtr; // a typedef for an a
{
// 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;
}
{
//指向形状的共享指针的Typedef
typedef boost::shared_ptr ShapePtr;
//数组的typedef,其形状存储为共享指针。
typedef数组ShapeArray;
ShapeArray我的ShapeArray;
ShapePtr my_Point(新点(3.1459));
my_ShapeArray[0]=my_Point;
cout指针(大致)是一个内存位置,因此当您打印指针时,这就是您得到的。如果您希望对象位于该内存位置,则可以通过在其前面放置星号来取消引用:
cout << *my_ShapeArray[0] << endl;
不能尝试去引用操作符*
*(my_ShapeArray[0])
在这种情况下也更喜欢使用“make_shared”。例如,“ShapePtr my_Point=boost::make_shared(3.1459)”,因为它可以提高内存效率。(假设点是从形状派生的)当我尝试:cout@Clark时,这意味着您必须提供一个ostream&operator。中间有两个步骤。1)不知何故,共享指针看起来像一个指针,2)有一个ostream操作符