【发布时间】:2011-05-29 16:10:36
【问题描述】:
我试图在运行时确定对象的大小。 sizeof 不起作用,因为这会在编译时返回大小。这是我的意思的一个例子:
class Foo
{
public:
Foo()
{
c = new char[1024*1024*1024];
}
~Foo()
{
delete[] c;
}
private:
char *c;
};
在这种情况下,sizeof(Foo) 将是 4 个字节,而不是 ~1GB。如何在运行时确定 Foo 的大小?提前致谢。
【问题讨论】:
-
您可能希望将对象的大小与对象控制的内存量区分开来。您设置
c指向的分配将永远 成为对象本身的一部分。Foo类的对象都将具有相同的大小(这将是上面示例中数据指针的大小)。这有点迂腐,但是... -
sizeof doesn't work because this returns the size at compile time.- 实际上不是。有时会有运行时 sizeofs,尤其是在 C99 和 GCC 中。 (stackoverflow.com/questions/2615203/…) -
@Dr. Jay,题外话,但我想知道如果您尝试运行以下代码会发生什么:Foo a; Foo b = a;
标签: c++ memory memory-management runtime