开发者

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 ex开发者_运维百科pectations wrong?


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


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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜