【发布时间】:2015-04-26 17:50:54
【问题描述】:
我的问题是关于以下场景:
std::string *ps = new std::string();
*ps = aVeryLargeString;
根据我的经验,通常发生的情况是 aVeryLargeString 超出了 *ps 的容量,因此 *ps 分配了额外的内存,保持起始位置相同。 所以 ps 仍将指向新字符串内存中的位置是一样的。
但是,如果该内存位置没有足够的连续空间会发生什么?重新分配是否会将字符串移动到完全不同的位置,从而使指针无效?
【问题讨论】:
-
std::string有一个内部指针。如果需要重新分配,内部指针会改变;您指向std::string的指针不会。这几乎就像你有一个指向指针的指针。 -
事实上,它正是就像你有一个指向指针的指针。
-
事实上,它有一个指向指针的指针。加上一些额外的结构信息。
-
其实正是有一个指向指针的指针。
-
我想我可能已经打破了这其中的可笑之处。我很抱歉。
标签: c++ string pointers heap-memory invalidation