0

配列、形状、点のいくつかのクラスがあります。ポイントは形状の一種です。

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;

}

出力は次のとおりです(コンストラクタとデストラクタについていくつかコメントがあります):

配列コンストラクター呼び出し(デフォルト)

形状コンストラクター呼び出し(デフォルト)

ポイントコンストラクター呼び出し(デフォルト)

002DDA20

ポイントデストラクタコール

シェイプデストラクタコール

配列デストラクタ呼び出し

ポイントを印刷した後にデストラクタが呼び出されるように見えるので、少し混乱していますが、ポイントを印刷する代わりに、メモリアドレスを印刷しているように見えます。理解するのを手伝ってくれませんか。ありがとう!

4

1 に答える 1

2

ポインタは(大まかに)メモリの場所であるため、ポインタを出力すると、それが得られます。代わりにそのメモリ位置にオブジェクトが必要な場合は、前にアスタリスクを付けてオブジェクトを逆参照します。

cout  << *my_ShapeArray[0] << endl;
于 2012-10-05T05:19:57.493 に答える