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
字符串字面量存储在静态存储区,本质上是一个左值的char*指针,不会调用移动构造函数吧
点赞 回复 分享
发布于 01-16 20:48 山东
string类内部有一个指向字符串的指针,被改变的是此指针,而不是指向类的指针
点赞 回复 分享
发布于 2022-11-18 10:56 河北
同问(另外,我试了一下长字符串,得到的实际char*的地址也是不相同的),所以有点搞不懂这个移动构造的意义在哪儿😂
点赞 回复 分享
发布于 2022-06-27 20:14
长字符串(>15)可以,短字符串是在栈上,不会移动拷贝
点赞 回复 分享
发布于 2021-08-12 11:04
打不开啊,楼主
点赞 回复 分享
发布于 2020-10-24 22:43
蹲大佬。试了一下确实不一样,这是真的底层啊。
点赞 回复 分享
发布于 2020-10-24 21:43
emmmm
点赞 回复 分享
发布于 2020-10-24 19:46
技术没人聊了吗。。
点赞 回复 分享
发布于 2020-10-24 18:27
有没有聊聊技术的大佬
点赞 回复 分享
发布于 2020-10-24 18:05

相关推荐

07-01 19:00
门头沟学院 Java
点赞 评论 收藏
分享
认真搞学习:这么良心的老板真少见
点赞 评论 收藏
分享
门口唉提是地铁杀:之前b站被一个游戏demo深深的吸引了。看up主页发现是个初创公司,而且还在招人,也是一天60。二面的时候要我做一个登录验证和传输文件两个微服务,做完要我推到github仓库,还要我加上jaeger和一堆运维工具做性能测试并且面试的时候投屏演示。我傻乎乎的做完以后人家跟我说一句现在暂时不招人,1分钱没拿到全是白干
你的秋招第一场笔试是哪家
点赞 评论 收藏
分享
评论
3
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务