#include<iostream>
using namespace std;
class Prac{
string ch;
public:
void getstring(string g)
{
ch=g;
return;
}
};
int main()
{
Prac obj1;
Prac obj2;
string str1;
cout<<"Enter string for object 1"<<endl;
getline(cin,str1);
obj.getstring(str1);
cout<<sizeof(obj1)<<endl;
cout<<sizeof(obj2)<<endl;
return 0;
}
我们知道对象的大小是其中存在的数据成员的总大小。对于obj1,我们为字符串变量插入一些值,对于obj2,我们将它留空。为什么输出(对象的大小)不会有任何差异?
答案 0 :(得分:0)
好吧,正如你所说,一个物体的大小(大致)是它所有成员的总和。
但是,你不能在运行时添加新成员吗?
没有。对象的大小是类型的编译时属性。如果对象的大小是24,那么无论你输入什么值,它都不会改变!
如果为其分配较大的值,则期望int
的大小更大。不,尺寸相同,但价值不同。
这与此处发生的情况大致相同。你有一个持有std::string
的班级。字符串包含容量,大小和指向字符串数据的指针。为那些不会改变结构大小的人分配任何值。
大小改变的是你的字符串指向的分配缓冲区的大小。但这并没有改变std::string
类的大小。
答案 1 :(得分:0)
首先,在C ++中,对象大小是在编译时确定的。因此大小不能在运行时更改。 Sizeof()实际上返回了类型的大小。通过语言设计,所有相同类型的对象具有相同的大小。
然后,成员之间可能存在填充,未使用的字节,因此类型的大小实际上可能比所有成员的大小稍大。
但要回答您的实际问题:可变长度数据不会存储在对象本身中。它的内存是单独分配的,而object只存储指向已分配数据的指针。