Класс ObjectInfo — это диагностический класс, предназначенный для отслеживания статистических данных, таких как время жизни и количество объектов. Конкретный класс наследуется от ObjectInfo, как показано. Затем член этого конкретного класса объявляется в теле профилируемого класса.
Хотя решение работает, его сложно поддерживать, поскольку оно требует синхронизации класса профилирования с профилируемым классом, поскольку имя класса используется для идентификации последнего. Также было бы сложно расширить класс профилирования для сбора другой информации, такой как размер объекта.
Предложите лучшее решение, в котором зависимости между классами профилирования и профилирования минимальны.
Можно ли реализовать проверку, определяющую, был ли создан объект профилируемого класса в стеке или в куче?
-- ObjectInfo.h --
#pragma once
class ObjectInfo
{
public:
ObjectInfo(const char* objectName);
virtual ~ObjectInfo(void);
private:
static int m_counter;
int m_objectNumber;
const char* m_className;
};
-- ObjectInfo.cpp --
#include "StdAfx.h"
#include "ObjectInfo.h"
#include <iostream>
#include "TimePrinter.h"
using namespace std;
int ObjectInfo::m_counter = 0;
ObjectInfo::ObjectInfo(const char* name) :
m_className(name)
{
m_objectNumber = ++m_counter;
cout << "Object: " << m_className << "# " << m_objectNumber << " created @ " <<
TimePrinter()<< endl;
}
ObjectInfo::~ObjectInfo(void)
{
cout << "Object: " << m_className << "# " << m_objectNumber << " destroyed @ " <<
TimePrinter() << endl;
}
-- Схема использования --
struct _AInfo : public ObjectInfo {
_AInfo() : ObjectInfo("_A") {}
};
struct _A {
_AInfo m_info;
};
Первоначально я думал, что этот вопрос касается использования метода отражения С++ для сбора информации о времени выполнения. Однако я не знаю, есть ли способ измерить время жизни объектов с помощью отражения C++. Кроме того, можете ли вы считать отражение C++ методом, который уменьшает зависимости между классами профилирования и профилирования?
ObjectInfo
шаблоном и наследовать от него напрямую:class A : public ObjectInfo<A>
. - person Bartek Banachewicz   schedule 24.02.2013