我正在尝试在我的代码中实现智能指针。我已经创建了一个类来将Point转换为shared_ptr,并且我为shared_ptr添加了一个print函数。在我的主要内容中,我创建了一个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类本身,而不是来自此源文件中的代码。
数组构造函数调用
Shape构造函数调用(默认)
点构造函数调用(3.1459,3.1459)ID:41
点析构函数调用
形状析构函数调用
数组析构函数调用
我期待看到shared_ptr构造函数/析构函数语句。我的问题出在P1代码中还是我在主要或其他地方的实现中?
谢谢!
答案 0 :(得分:0)
你正在打电话
my_ShapeArray[0]->Print();
必须是Shape的成员函数。
你没有打电话给
Print();
您在给定代码中定义的函数以及使用P1类的函数。
答案 1 :(得分:0)
你没有在main
函数中调用代码中的任何一位......你永远不会实例化P1
,你永远不会调用独立函数Print
,那么怎么可能您的日志记录语句是否会被调用?