私のプロジェクトでは、抽象基底クラス "Base"を使用しています。 "Base"から派生したオブジェクトの動的割り当て/割り当て解除のすべてを追跡したいと思います。この目的のために、私は "Base"の新しい/削除演算子をオーバーライドしました。オブジェクト構築時に最も派生した型を取得する
オーバーライドされたnew演算子でメモリを正常に割り当てた後、割り当ての最も派生した型とそのサイズを使用して、メモリを追跡するために使用しているオブジェクトに通知したいと思います。サイズは問題ではありません( "Base"の新しい演算子に直接渡されるため)が、最も派生した型を取得することは問題です。
私はそれをやろうとしている方法ではこれが不可能だと思うことに傾いています。オブジェクトのより多くの派生部分がまだ構築されていないので、それらが何であるかを知る方法がありません。しかし、「ベース」クラスのオーバーロードされた新しい演算子は、最終的な製品について何かを知っています。サイズについては、他のことを知ることが可能ですか?コンテキストの場合
:new
オペレータはメモリだけで、何よりもの割り当てを行うよう
void* Base::operator new(size_t size)
{
void* storage = malloc(size);
if (storage == NULL)
throw std::bad_alloc();
// Notify MemoryTracker an allocation has occurred
// MemoryTracker::Instance().Allocate(type, size);
return storage;
}
+1これは 'operator new'を使っては可能ではないと私は信じていますが、私はそれを証明できません。私は、C++言語の機能についてもう一度間違っていることが証明されるかどうかを知りたいのです。 :-) – templatetypedef