空類不為空
#include <iostream>
class Empty {};
int main() {
std::cout << "sizeof(Empty):" << sizeof(Empty) << std::endl;
Empty empty;
std::cout << "sizeof(empty):" << sizeof(empty) << std::endl;
}
輸出
sizeof(Empty):1
sizeof(empty):1
Empty類無任何成員變量,但是sizeof(Empty)和sizeof(empty)卻為1,有點反直覺。
奇怪的知識增加了
這是類實例化的原因,空類也可以被實例化,如果對空的類sizeof取值為0,那么該空類實例化出很多實例時,在內存地址上就不能區(qū)分該類實例化出的實例,所以為了實現(xiàn)每個實例在內存中都有一個獨一無二的地址,編譯器往往會給一個空類隱含的加一個字節(jié),這樣空類在實例化后在內存得到了獨一無二的地址,所以空類所占的內存大小是1個字節(jié)。