Rajeesh_R Ответов: 1

Почему функция sizeof() дает разный результат для объекта одного и того же класса, созданного в стеке и куче?


я создал класс с 2 методами(но без элементов данных). когда я проверил размер объекта, который был создан на стеке, он сказал 1. Но когда я проверил наличие объекта, созданного на куче, он говорит 4. почему он отличается?

Что я уже пробовал:

class MyClass
{
public:
    void print()
    {
        cout << "print";
    }
    void print2()
    {
        cout << "print2";
    }
private:
    //bool bT;
    //int data;
    //int data2;
};

int main()
{
    MyClass stackObj;
    MyClass* heapObj = new MyClass();

    int classSize = sizeof(MyClass); /// outputs 1
    int stackObjsize = sizeof(stackObj); /// outputs 1
    int heapObjsize = sizeof(heapObj); /// outputs 4. why?
    return 0;
}

1 Ответов

Рейтинг:
8

OriginalGriff

Потому что heapObj это не экземпляр MyClass, это указатель на экземпляр MyClass - и sizeof возвращает размер указателя, а не базового объекта.


Rajeesh_R

Спасибо.! теперь я все понял.

после того как я переоделся

int heapObjsize = sizeof(*heapObj); /// выходы 1

OriginalGriff

Всегда пожалуйста!