c – 使用unique_ptr和shared_ptr进行奇怪的段错误
发布时间:2020-12-16 10:31:29 所属栏目:百科 来源:网络整理
导读:我遇到了一个奇怪的段错误.原因实际上导致我一个错误,但我仍然不明白为什么在这里引起分段错误……代码是: #include memoryint main(int argc,char **arv){ int *i = new int; std::unique_ptrint u1(i); std::unique_ptrint u2; u1 = std::move(u2); // li
我遇到了一个奇怪的段错误.原因实际上导致我一个错误,但我仍然不明白为什么在这里引起分段错误……代码是:
#include <memory> int main(int argc,char **arv) { int *i = new int; std::unique_ptr<int> u1(i); std::unique_ptr<int> u2; u1 = std::move(u2); // line 7 std::shared_ptr<int> s1(i); // line 8 std::shared_ptr<int> s2; s2 = s1; } 我使用g 4.6和-std = c 0x编译并获得段错误. 如果我将第7行更改为u2 = std :: move(u1); (那是虫子)它消失了. 所以没有伤害,但我不明白为什么会有段错误.据我所理解, 你怎么看?我如何保护自己免受这种伤害? 谢谢,斯蒂芬 解决方法
你的第8行是错误的:一旦你在unique_ptr中捕获我,你就不能再把它交给其他一些所有权对象了!每个所有者都会尝试删除* i,这是错误的.
相反,您应该从唯一指针创建共享指针: std::shared_ptr<int> s1(std::move(u2)); (另外,你的u1和u2方向错误.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- ruby-on-rails – Ruby,SSLSockets和Apple的增强型APN消息格
- c – 初始化列表大小的Deduce模板参数
- xml与String相互转换
- PostgreSQL:“ FATAL: requested WAL segment00800002A0 h
- Cocos2d-x_C++11新特性Lambda表达式
- 使用Flash获取计算机信息
- [寒江孤叶丶的Cocos2d-x之旅_30]Cocos2d-x 3.5 EditBox无法
- 云的2.0时代,Oracle亚太区用户组领袖峰会都聊了啥?
- 12款免费与开源的NoSQL数据库介绍
- Cocos2d-x3.3Final(9)RichText常用成员函数(C++)