sizeof
в этом случае возвращает размер вашего класса.Вы говорите, что присвоили данные Foo, но не определили Foo.Я подозреваю, что это выглядит примерно так:
class Foo
{
public:
string my_str;
int* my_ints;
};
А затем вы делаете что-то вроде этого:
Foo f;
f.my_str = "Hello, Foo.";
f.my_ints = new int[1000];
... и ожидаете, что sizeof(f)
будет теперь размером Fooплюс размер строки плюс размер массива int
.Но это не так.Foo
никогда не изменяется в размере, потому что у него нет "массива" или массива типа int.Скорее, он имеет объект string
(который, в свою очередь, вероятно, имеет указатель на массив символов) и указатель на int
.Память, выделенная для строки и массива int, не находится в Foo, на нее указывает Foo.