std::string中移动构造函数实现方式的疑问(已解决)


按照移动构造函数的要求,个人理解std::string的移动构造函数应该将参数对象的char* data指针直接赋值给目标对象,然后置为nullptr。从地址来看,目标对象的data指针指向的地址应该和参数对象开始时指向的相同。
#include<iostream>
#include<string>
#include<utility>
using namespace std;
int main()
{
	string a("a string");
	cout << &a << " " << hex << (int)a.data() << endl;
	string b(std::move(a));
	cout << &b << " " << hex << (int)b.data() << endl;
}
不过 此程序输出为
0072F99C 72f9a0
0072F978 72f97c
也就是说 data指针指向的内存并不相同,那么实际上是不是还是进行了逐char的拷贝操作?那么在这里移动构造函数的意义是什么呢?只是把原来的data指针置为null了吗?
#C/C++#
全部评论
有没有大佬
1 回复 分享
发布于 2020-10-24 19:12
有没有聊聊技术的大佬
点赞 回复 分享
发布于 2020-10-24 18:05
技术没人聊了吗。。
点赞 回复 分享
发布于 2020-10-24 18:27
emmmm
点赞 回复 分享
发布于 2020-10-24 19:46
蹲大佬。试了一下确实不一样,这是真的底层啊。
点赞 回复 分享
发布于 2020-10-24 21:43
打不开啊,楼主
点赞 回复 分享
发布于 2020-10-24 22:43
长字符串(>15)可以,短字符串是在栈上,不会移动拷贝
点赞 回复 分享
发布于 2021-08-12 11:04
同问(另外,我试了一下长字符串,得到的实际char*的地址也是不相同的),所以有点搞不懂这个移动构造的意义在哪儿😂
点赞 回复 分享
发布于 2022-06-27 20:14
string类内部有一个指向字符串的指针,被改变的是此指针,而不是指向类的指针
点赞 回复 分享
发布于 2022-11-18 10:56 河北

相关推荐

今天 11:46
已编辑
南京理工大学 C++
都没出结果,问问是各位会如何选择补充一下,华为应该是14左右县是南通市下面的一个县局
在敲键盘的布莱克很积极:兄弟,我给你提供一个角度,其他评论可能更多是从待遇和发展前景来看的,但是我建议你想一想你走哪条路更能产生对自己的身份认同。 如果你乐于钻研技术,喜欢工程实践,即使从华为失业你也能认可自己工程师的身份,不因为工作上不顺而失去对自己的尊重(因为这是你几乎必然会面对的情况),那就可以去华为,毕竟广阔天地大有可为。 但是如果你并不能因为技术产生自我的身份认同,那建议还是公务员吧,因为这种职业自带身份认同,不需要你有很强的兴趣与心理建设来支持,即使每月钱不多,你比较容易做到自己尊重自己,也容易在社会上得到他人的尊重。 不管钱多钱少,待遇怎么样,最终还是要自己过得开心,享受到了生活,才算是好的一生
投递华为等公司10个岗位 >
点赞 评论 收藏
分享
和蔼:在竞争中脱颖而出,厉害! 但是有一个小问题:谁问你了?😡我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了
点赞 评论 收藏
分享
3 2 评论
分享
牛客网
牛客企业服务