我正在尝试在我的代码中实现智能指针。我创建了一个类来将 Point 转换为 shared_ptr,并为 shared_ptr 添加了打印功能。在我的主体中,我创建了一个 Shape 类型的 shared_ptr 数组。当我将点分配给数组时,我只看到原始构造函数/析构函数,而不是共享构造函数/析构函数。这段代码正确吗?
谢谢。
#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 代码中还是在主要或其他地方的实现中?
谢谢!