C++-请深度剖析string *pString = new string[4];的实现机制及以下代码中的相关问题,谢谢。

发布于 2017-03-07 02:32:00 字数 741 浏览 1121 评论 1

/*
1. 运行环境VS2008
2. 请解释各行的输出为什么?
*/
#include<iostream>
#include<string>
using namespace std;

int main(void)
{
string *pString = new string[4];

pString[0] = "aaaaa";
pString[1] = "bbbb";
pString[2] = "ccc";

cout << "sizeof(string) = " << sizeof(string) << endl;
cout << "sizeof(pString[0] = " << sizeof(pString[0]) << endl;
cout << "sizeof(pString) = " << sizeof(pString) << endl;

return 0;
}

/*
运行结果:
sizeof(string) = 32
sizeof(pString[0]) = 32
sizeof(*pString) = 32
*/

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

虐人心 2017-05-30 07:40:55

string pString = new string[4];
这东西实际上就是给一个指针分配4个string单元的空间。和 int *pInt = new int[4];一样。如果硬要深度剖析的话,我想应该就是 首先 分配 4
sizeof(string) 的内存,然后将 pString 指向这块内存的首地址。
sizeof(string) = 32。 string所占用的内存就是32,他的size之所以是32,因为它的所有非静态成员的总内存加上虚函数表指针(如果有的话) 为32.
sizeof(pString[0]) = 32。 pString[0]其实就是一个string对象,它的内存当然是32拉。
sizeof(*pString) = 32。和上面是一样的

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文