0

我正在尝试在我的代码中实现智能指针。我创建了一个类来将 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 代码中还是在主要或其他地方的实现中?

谢谢!

4

2 回答 2

0

你在打电话

my_ShapeArray[0]->Print();

它必须是 Shape 的成员函数。

你没有打电话给

Print();

您在给定代码中定义的函数,它是使用 P1 类的函数。

于 2012-10-05T21:47:32.830 回答
0

您没有从main函数中的代码中调用任何位...您从不实例化P1,从不调用独立函数Print,那么您的任何日志记录语句怎么可能被调用?

于 2012-10-05T22:05:22.633 回答