永发信息网

关于类的对象的大小

答案:3  悬赏:80  手机版
解决时间 2021-03-16 22:17
  • 提问者网友:却不属于对方
  • 2021-03-16 03:32
假如一个类的成员变量中含有STL容器,比如一个vector,vector是动态的扩增的容器嘛,那么,这个类的对象在使用的过程中不断的向vector中添加数据,这个对象的大小会改变(增加)吗?

class A
{
public:
A();
~A();

vector <。。。。>
};

A * a = new A();
多次 a -> vector.push_back(....)
sizeof(*a) 会变化吗?

问这个,主要是为了,我使用 placement new方式,指定在一段分配好的内存中new出类的实例,比如这段内存是128个字节,然后不断的向这个实例中的vector加数据,这个实例的大小会变化吗? 最终会越界吗? 如果越界,C++不检查越界,最终会出问题吗?
最佳答案
  • 五星知识达人网友:杯酒困英雄
  • 2021-03-16 04:30
你可以运行如下程序看一下

#include <iostream>
#include <vector>
using namespace std;

void main()
{
vector<int> a;
cout<<sizeof(a)<<endl;
for(int i=1;i<=100;i++)
a.push_back(i);
cout<<sizeof(a)<<endl;
}

在我的机子上显示的是16 16。说明vector本身是一个固定大小的结构体,它里面应该是管理着若干个指针,这些指针指向数组数据,无论有多少数据,这些指针都是固定的,不会带来vector本身结构大小的变化
全部回答
  • 1楼网友:纵马山川剑自提
  • 2021-03-16 06:06
所以, 类对象(t)的字节大小( sizeof(t) )等于所有数据成员( i, j, k )的字节空间再加上一些“隐性的”用来存储其他信息的字节空间,大于数据
  • 2楼网友:狂恋
  • 2021-03-16 05:16
类的对象存储内容是类里面的属性值,java没有提供现成的函数去计算对象的内存空间,不过可以用大量产生某个对象然后计算平均值的方法近似获得该对象占用的内存。 写个例子给你: public class test{ long f1 = runtime.getruntime().freememory(); for(int i=0;i<1000;i++) { myobject t = new myobject(); } long f2 = runtime.getruntime().freememory(); system.out.println((f1-f2)/1000);//输出每个对象占用的字节数 } }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯