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

标签 c++ arrays pointers boost shared-ptr

我有几个类: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/

相关文章:

c++ - 名称重整如何与使用不同编译器编译的 DLL 和 LIB 一起工作

c - 如何将指针分配给此数组(OpenCL)中某些结构的数组元素?

c - 为什么 char *ptr 到 int 和 int *ptr 到 char 之间的类型转换工作完全正常?当它们被设计为指向特定的数据类型变量时

c - 需要对指向结构的动态指针数组进行排序,其中可能包含 NULL 指针

C++:从只能通过迭代器访问的数据类型中高效地提取元素子集

c++ - 避免重复代码

c - 如何将二进制数组转换为其 2 的补码?

arrays - 在 C 中打印指针本身

c++ - libxml2 是否维护文档顺序?

java - 查找数组中的非重复元素