增强共享指针构造函数/析构函数

时间:2012-10-05 21:25:35

标签: c++ boost constructor shared-ptr smart-pointers

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

谢谢!

2 个答案:

答案 0 :(得分:0)

你正在打电话

my_ShapeArray[0]->Print();

必须是Shape的成员函数。

你没有打电话给

Print();

您在给定代码中定义的函数以及使用P1类的函数。

答案 1 :(得分:0)

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