コードにスマート ポインターを実装しようとしています。Point を shared_ptr に変換するクラスを作成し、shared_ptr の印刷関数を追加しました。私のメインでは、Shape 型の shared_ptr の配列を作成します。Points を配列に割り当てると、共有コンストラクタ/デストラクタではなく、生のコンストラクタ/デストラクタのみが表示されます。このコードは正しいですか?
ありがとう。
#include "Point_H.hpp"
#include "Shape_H.hpp"
#include "Array_H.hpp"
#include "boost/shared_ptr.hpp"
using namespace CLARK::Containers;
using namespace CLARK::CAD;
class P1
{
private:
boost::shared_ptr<Point> pp;
public:
P1(boost::shared_ptr<Point> value) : pp(value) { cout << "P1 constructor call (default)" << endl; }
virtual ~P1() { cout << "P1 destructor call" << endl; }
void print() const { cout << "Point: " << *pp << endl; }
};
void Print()
{
boost::shared_ptr<Point> myPoint (new Point);
{
P1 point1(myPoint);
point1.print();
}
}
int main()
{
// Typedef for a shared pointer to shape
// a typedef for an array with shapes stored as shared pointers.
typedef boost::shared_ptr<Shape> ShapePtr;
typedef Array<ShapePtr> ShapeArray;
ShapeArray my_ShapeArray(3);
ShapePtr my_Point (new Point(3.1459, 3.1459));
my_ShapeArray[0] = my_Point;
my_ShapeArray[0]->Print();
return 0;
}
出力は次のようになります (コンストラクター/デストラクター ステートメントは、このソース ファイルのコードではなく、Point/Shape/Array クラス自体からのものです。
配列コンストラクターの呼び出し
シェイプ コンストラクターの呼び出し (既定)
ポイントコンストラクター呼び出し (3.1459,3.1459) ID:41
ポイントデストラクタ呼び出し
形状デストラクタ呼び出し
配列デストラクタ呼び出し
shared_ptr コンストラクター/デストラクター ステートメントが表示されることを期待していました。問題は P1 コードにありますか、それともメインまたは他の場所での実装にありますか?
ありがとう!