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



我有这样一个类:

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字节。

然而,如果我在我的平台(win7 64)上执行sizeof(std::string),使用MSVC11,我得到40字节。

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

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

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

最新更新