all
all

Reputation: 324

sizeof *this object

Code:

#include <cstdio>

class myc {
    int dummy;
public:
    int si(){return sizeof(*this);}
};

class d_myc : public myc {
    int d_dummy;
};

int main() {
    myc a;
    d_myc b;
    printf("%d %d\n%d %d", a.si(), b.si(), sizeof(a), sizeof(b));
    return 0;
}

output :

4 4
4 8

I expected :

4 8
4 8

Why were my expectations wrong?

Upvotes: 15

Views: 8278

Answers (2)

fwg
fwg

Reputation: 1038

This is resolved at compile time:

class myc {
    int dummy;
public:
    int si(){return sizeof(*this);}
};

i.e. *this is always myc and will never be d_myc. To get what you want you will have to override the function in d_myc to do the same in the derived as the base. This is because sizeof(d_myc) includes the base class too.

Upvotes: 1

Oliver Charlesworth
Oliver Charlesworth

Reputation: 272487

sizeof is resolved at compile-time, not run-time. So sizeof(*this) is equivalent to sizeof(myc).

Upvotes: 26

Related Questions