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++リフレクションを使用してオブジェクトの存続期間を測定する方法があるかどうかはわかりません。さらに、C ++リフレクションは、プロファイリングされたクラスとプロファイリングされたクラスの間の依存関係を減らす手法であると考えられますか?