在用栈实例化对象的过程中,对象内定义的成员函数不占内存空间,也就是说对象的大小取决于对象内定义的数据成员的大小。
Class Shape
{
public:
void test(){}
};
Class Shape1
{
public:
void test(){}
private:
int m_r;
};
当用sizeof()计算对象大小的时候,Shape实例化的对象占用的内存为1,而Shape1实例化的对象内存为4。
也就是说当对象内没有定义数据成员时,系统用1个内存单元来标记这个对象的存在。
注意:
当类中定义了虚函数(或者虚析构函数),在实例化对象的时候,系统会自动生成一个虚函数指针,指向虚函数表。
Class Shape
{
public:
virtual void test(){}
};
此时Shape类实例化的对象占用4个内存单元,因为一个32位系统下一个指针占4个字节大小。