Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 学习使用Boost共享指针,控制台输出正确吗?_C++_Arrays_Pointers_Boost_Shared Ptr - Fatal编程技术网

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

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

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

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

{   

// 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操作符