C使用智能指针链接列表
我只使用链接列表的原始指针和模板.例如,成员数据,Node< T> * head;当我插入节点时,其中一行将是head = new Node< T>(data);.
但是,现在我需要使用智能指针,我不知道如何更改它以使用智能指针.是否将成员数据改变为shared_ptr< Node< T>>头;而另一条线将变为 解决方法
您不需要为链表使用智能指针,因为该语句没有意义.您不要将智能指针用于低级数据结构.您可以将智能指针用于高级程序逻辑.
就低级数据结构而言,您使用C标准库中的标准容器类,如std :: list [*],它无论如何都可以解决所有内存管理问题,而无需在内部使用任何智能指针. 如果你真的需要你自己的高度专业化/优化的自定义容器类,因为整个C标准库不适合你的需求,你需要替换std :: list,std :: vector,std :: unordered_map和其他优化的,测试过的,记录和安全的容器 – 我非常怀疑! – 然后你必须手动管理内存,因为这样一个专门的类几乎肯定需要内存池,写时复制甚至垃圾收集等技术,所有这些都与典型的智能指针冲突相当简单的删除逻辑. 用Herb Sutter的话来说:
这些方面的内容也在Herb Sutter’s and Bjarne Stroustrup’s C++ Core Guidelines中表达:
使用原始指针在C中编写链表类可能是一项有用的学术练习.用C语言编写一个带有智能指针的链表列表是一个毫无意义的学术练习.在生产代码中使用这两个自制的东西中的任何一个几乎都是自动错误的. [*]或者只是std :: vector,因为缓存局部性几乎总是更好的选择. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 正则表达式 – RE – > FSM发生器?
- c# – Request.Url.GetLeftPart(UriPartial.Authority)在ht
- ruby-on-rails – Heroku Rails Net :: HTTP:OpenSSL :: S
- ruby-on-rails – 在Ruby中解析(在Rails上)
- c# – 在Razor视图中foreach循环中的汇编未引用编译错误
- hdu3076----ssworld VS DDD
- XML练习案例(学生管理系统)
- 会话EJB系列(六)依赖注入
- Dojo入门三种HelloWorld!
- Cocos2dx CrazyTetris 自定义精灵类 继承精灵