Profilerstellung für die Lebensdauer von C ++ - Objekten

Die ObjectInfo-Klasse ist eine Diagnoseklasse, mit der statistische Daten wie die Lebensdauer und die Anzahl der Objekte verfolgt werden können. Eine bestimmte Klasse erbt wie gezeigt von ObjectInfo. Ein Mitglied dieser bestimmten Klasse wird dann im Hauptteil einer Profilklasse deklariert.

Obwohl die Lösung funktioniert, ist die Wartung schwierig, da die Profilierungsklasse mit der profilierten Klasse synchron gehalten werden muss, da der Klassenname zur Identifizierung der späteren Klasse verwendet wird. Es ist auch schwierig, die Profilierungsklasse zu erweitern, um verschiedene Informationen wie die Größe des Objekts zu erfassen.

Schlagen Sie eine bessere Lösung vor, bei der die Abhängigkeiten zwischen Profil- und Profilierungsklasse minimal sind.

Ist es möglich, eine Überprüfung zu implementieren, die bestimmt, ob das Objekt der Profilklasse auf Stapel oder Heap erstellt wurde?

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

- Das Verwendungsmuster -

struct _AInfo : public ObjectInfo {
    _AInfo() : ObjectInfo("_A") {}
};

struct _A {
  _AInfo m_info;
};

Ich dachte ursprünglich, dass diese Frage die Verwendung der C ++ - Reflexionstechnik zum Sammeln der Laufzeitinformationen betrifft. Ich weiß jedoch nicht, ob es eine Möglichkeit gibt, die Lebensdauer von Objekten mithilfe der C ++ - Reflexion zu messen. Können Sie außerdem in Betracht ziehen, dass die C ++ - Reflexion eine Technik ist, die die Abhängigkeiten zwischen der profilierten Klasse und der Profilierungsklasse verringert?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage