演算子new[]を使用して割り当てられた単一要素のサイズまたは要素数を取得する方法はありますか?
私が意味したのは:
void* Object::operator new[](size_t size)
{
void *temp = ::operator new(size);
//Get size of single element or count of elements being allocated
return temp;
}
なぜそれが必要なのか:
operator new(size_t)
オブジェクトがヒープに割り当てられている場合にoperator new[](size_t)
のみ呼び出されるため、これに基づいてc++ガベージコレクションを作成することを考えました。
Object
すべてのオブジェクトはクラスから継承しますObject
クラスはオーバーライドoperator new(size_t)
し、operator new[](size_t)
次のようになります。void* Object::operator new(size_t size) { Object& result = *static_cast<Object*>(::operator new(size)); result.referenceCount = (int)&result; return &result; }
コンストラクター
Object
はこの情報を使用します:Object::Object() { if ((void*)referenceCount != this) { referenceCount = -1; //stack object no reference counting } else { referenceCount = 1; //heap object count references } }
- 使用するガベージコレクタのユーザー
referenceCount
フィールド。
私が今必要としているのは、operator new[](size_t)
設定するために実装するreferenceCount
ことです。そのため、単一要素のサイズまたは要素数が必要です。operator new[](size_t)
問題外のすべてのオブジェクトに強い。
何か案は?