c ++中对象的大小

时间:2017-08-26 15:08:31

标签: c++

#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,我们将它留空。为什么输出(对象的大小)不会有任何差异?

2 个答案:

答案 0 :(得分:0)

好吧,正如你所说,一个物体的大小(大致)是它所有成员的总和。

但是,你不能在运行时添加新成员吗?

没有。对象的大小是类型的编译时属性。如果对象的大小是24,那么无论你输入什么值,它都不会改变!

如果为其分配较大的值,则期望int的大小更大。不,尺寸相同,但价值不同。

这与此处发生的情况大致相同。你有一个持有std::string的班级。字符串包含容量,大小和指向字符串数据的指针。为那些不会改变结构大小的人分配任何值。

大小改变的是你的字符串指向的分配缓冲区的大小。但这并没有改变std::string类的大小。

答案 1 :(得分:0)

首先,在C ++中,对象大小是在编译时确定的。因此大小不能在运行时更改。 Sizeof()实际上返回了类型的大小。通过语言设计,所有相同类型的对象具有相同的大小。

然后,成员之间可能存在填充,未使用的字节,因此类型的大小实际上可能比所有成员的大小稍大。

但要回答您的实际问题:可变长度数据不会存储在对象本身中。它的内存是单独分配的,而object只存储指向已分配数据的指针。