动态内存中的allocator

Kyson_ 2020-01-05 03:27:42

allocator<string> alloc;
auto const p=alloc.allocate(10);
auto q=p; //为什么说这里q指向的是最后构造的元素之后的位置?那p指向哪?
alloc.construct(q++,10,'c'); //这一句又是什么意思?为什么是p++?

这里最让我迷惑的就是p和q的指向了,刚学到动态数组,理解有限,希望大家能帮我解答,谢谢~
...全文
44 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kyson_ 2020-01-06
  • 打赏
  • 举报
回复
引用 3 楼 真相重于对错 的回复:
alloc是一个构造器,封装对内存池的操做。 c++ primer上应该是指,q=p的时候,因为alloc尚没有构造,所以是指向第一个位置。 下句话的 construct(q++,...) ,构造了一个对象,因此q指向了第二个尚未构造的对象的位置。
明白了,谢谢您! 我太较真儿了
真相重于对错 2020-01-06
  • 打赏
  • 举报
回复
alloc是一个构造器,封装对内存池的操做。 c++ primer上应该是指,q=p的时候,因为alloc尚没有构造,所以是指向第一个位置。 下句话的 construct(q++,...) ,构造了一个对象,因此q指向了第二个尚未构造的对象的位置。
Kyson_ 2020-01-06
  • 打赏
  • 举报
回复
引用 1 楼 真相重于对错 的回复:
allocate 就是返回一个内存的地址。 q=p并不是位置之后,p就是allocate alloc.construct(q++,10,‘c’),意思是把在q的位置创建一个10个字符'c'的string,然后把q移动到下一个位置,alloc应该是可以容纳10个string ,下一个位置是指下一个string
原来q++是这个意思,所以执行*q的话是错误的,因为q指向的位置尚未构造,多谢了🙏但是我还是不理解auto q=p;之后q指向哪,c++ primer上写的就是指向 最后构造的元素之后的位置,这个位置是哪
真相重于对错 2020-01-05
  • 打赏
  • 举报
回复
allocate 就是返回一个内存的地址。 q=p并不是位置之后,p就是allocate alloc.construct(q++,10,‘c’),意思是把在q的位置创建一个10个字符'c'的string,然后把q移动到下一个位置,alloc应该是可以容纳10个string ,下一个位置是指下一个string

64,681

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧