Boost Shared Pointer Конструкторы / Деструкторы

Я пытаюсь реализовать умные указатели в моем коде. Я создал класс для преобразования Point в shared_ptr и добавил функцию печати для shared_ptr. В основном я создаю массив shared_ptr типа Shape. Когда я назначаю точки массиву, я вижу только необработанные конструкторы / деструкторы, а не общий конструктор / деструкторы. Этот код правильный?

Благодарю.

#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;
}

Вывод выглядит так, как показано ниже (операторы constructor / destructor взяты из самих классов Point / Shape / Array, а не из кода в этом исходном файле.

Вызов конструктора массива

Вызов конструктора формы (по умолчанию)

Вызов конструктора точек (3.1459,3.1459) ID: 41

Точка деструктора вызова

Вызов деструктора формы

Вызов массива деструкторов

Я ожидал увидеть операторы shared_ptr конструктор / деструктор. Моя проблема в коде P1 или в моей реализации в основном или в другом месте?

Спасибо!

0

Решение

Ты звонишь

my_ShapeArray[0]->Print();

которая должна быть функцией-членом Shape.

Вы не звоните

Print();

функция, которую вы определяете в данном коде и которая использует класс P1.

0

Другие решения

Вы не вызываете ни одного бита из своего кода в main функция … Вы никогда не создаете экземпляр P1вы никогда не вызываете отдельную функцию PrintТак как же может быть вызван любой из ваших операторов логирования?

0

По вопросам рекламы [email protected]