インスタンス化後にオブジェクトをパディングする方法があるかどうか疑問に思っていました。以下の実装でクラス Foo からインスタンス化されたオブジェクトを考えてみましょう:
class Foo
{
size_t addr;
unsigned allocationNum;
public:
Foo()
{
addr = (size_t)this;
allocationNum = 0;
}
~Foo()
{
addr = 0;
allocationNum = 0;
}
void SetAllocNum(unsigned nAllocationNum)
{
allocationNum = nAllocationNum;
}
unsigned GetAllocNum() const
{
return allocationNum;
}
size_t GetAddress() const
{
return addr;
}
};
次に、オブジェクトのインスタンスが によって作成されますFoo* object = new Foo();
。オブジェクトに追加して、より大きなオブジェクトとして表示する方法はあります(size_t)object
か ? sizeof(*object)
また、char* のような標準データ型をこのオブジェクトにキャストする場合、キャスト先のオブジェクトのサイズに合わせて char* をパディングする方法はありますか? 私がこれらの質問をするのは、やや好奇心からであり、私のプログラムで抱えている問題を解決できるかもしれないと感じているからです。具体的なコンテキストは次のとおりです。
T* AddObject()
{
T* object = new T(); // Here is the new object T=Foo in this case.
*(T*)(buffer+position) = *object; // Being stored in a char* buffer at current empty position
T* returnValue = &(*(reinterpret_cast<T*>(buffer+position)));
// ^ Here I try casting the char* buffer@position with the object contents stored inside the buffer.
return returnValue;
}
これの問題は、それを T オブジェクトにある程度適切にキャストしていることですが、サイズは依然としてバッファーのサイズのままです。main で実行sizeof(*object)
すると、オブジェクトのサイズがどうあるべきかが表示されますが、(size_t) object
from Foo* object = new Foo()
と from を比較すると、(size_t)differentObj
from Foo* differentObj = AddObject()
は(size_t)differentObj
と同じです(size_t)buffer
が、同じではありません(size_t)object
。たぶん、メモリ内のオブジェクトが持っているビット数とはsize_t
異なる表現を理解していないためかもしれません。sizeof
少なくとも私が理解していることからsizeof
、変数または型が占有するメモリの量をバイト単位で表しています。