#include<iostream>
using namespace std;
class A
{
};
class B
{
public:
void disp()
{
cout<<" This is not virtual function.";
}
};
class C
{
public:
virtual void disp()
{
cout<<"This is virtual function.";
}
};
int main()
{
cout<<"class A"<<sizeof(A)<<endl;
cout<<"class B"<<sizeof(B)<<endl;
cout<<"class C"<<sizeof(C)<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
sizeof类A和类B都只是1个字节.B中成员函数disp的内存分配是什么
Nav*_*een 24
对于类的每个实例,内存仅分配给其成员变量,即类的每个实例都不会获得它自己的成员函数副本.所有实例共享相同的成员函数代码.您可以将其想象为编译器为每个成员函数传递一个隐藏的this指针,以便它对正确的对象进行操作.在您的情况下,由于C++标准明确禁止0大小的对象,因此A类和B类的最小可能大小为1.对于C类,由于存在虚函数,因此C类的每个实例都将具有指向其v的指针-table(这是特定于编译器的).所以这个类的sizeof将是sizeof(指针).
| 归档时间: |
|
| 查看次数: |
9162 次 |
| 最近记录: |