大多数时候我使用struct
来保存套接字通信数据结构的所有参数,然后我可以通过传递起始地址及其大小轻松地复制,传递或将整个结构放在套接字上。
如果我为struct
的变量短数组添加构造函数,构造函数是否会占用结构中的任何空格?或者我可以在没有构造函数的情况下使用与struct
相同的构造函数处理struct
,并将整个struct
复制到套接字及其起始地址及其大小及其空间还在继续分配?
答案 0 :(得分:7)
不,非虚拟成员函数不会对您的对象的sizeof
有所贡献。至少有一个虚函数的存在(因为构造函数不能是虚拟的),因为编译器通常通过指针(vpointer)实现它们到指向函数的指针数组(vtable),因此它必须存储该指针(4或8)通常是字节。
答案 1 :(得分:0)
这个问题与C ++对象模型有关。正常功能不会增加数据大小。但是,如果我们添加虚函数,编译器将生成__vptr指向虚函数表,这会增加struct的数据大小。
例如,我有一个.C
#include <iostream>
using namespace std;
struct X
{
X(){}
int i;
int j;
};
int main()
{
X x;
cout << sizeof(x) << endl;
}
在这里,我在我的机器中使用我的IBM XL C ++编译器来编译和运行它:
xlC -+ a.C
./a.out
输出为8,与结构只有int i和int j相同。
但如果我添加两个虚函数:
#include <iostream>
using namespace std;
struct X
{
X(){}
int i;
int j;
virtual void foo(){}
virtual void bar(){}
};
int main()
{
X x;
cout << sizeof(x) << endl;
}
如果重新编译并运行它:
xlC -+ a.c
./a.out
两个int的输出为16. 8,__ vptr的输出为8(我的机器是64位)。