类中数据成员的大小不匹配

时间:2014-07-24 19:12:31

标签: c++ string visual-studio visual-c++

我有这堂课:

class MyClass{
    public:
        shared_ptr<X> a;
        shared_ptr<Y> b;
        std::string c;
        std::vector<double> d;
        std::vector<shared_ptr<Z>> e;
        int f;
};

当我使用开关在VS2012上编译以查看类布局时,我得到了这个:

1>  class MyClass   size(128):
1>      +---
1>   0  | {vfptr}
1>   8  | ?$shared_ptr@VX@@ a
1>  24  | ?$shared_ptr@VY@@ b
1>  40  | ?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@ c
1>  72  | ?$vector@NV?$allocator@N@std@@ d
1>  96  | ?$vector@V?$shared_ptr@Z@@@boost@@V?$allocator@V?$shared_ptr@VZ@@@boost@@@std@@ e
1>  120 | f
1>      | <alignment member> (size=4)
1>      +---

它意味着数据成员c是32个字节。

但是,如果我在我的平台(Win 7 64)上sizeof(std::string),使用MSVC11,我会得到40个字节。

为什么sizeof()给我40但上面的编译器内存布局暗示32?

1 个答案:

答案 0 :(得分:-1)

数据成员c可能是指向字符串对象的指针。由于std :: string存储了一个可变大小的字符串,因此您无法在该空间中放置任何所需的内容。

所以它是一个指针,由语言管理而不是你。