effective stl 第10条:了解分配子(allocator)的约定和限制

可移植的分配子不能有任何非静态的数据成员,


C++标准指出:允许STL实现假定同一类型的分配子都等价


分配子在原始分配内存这一点上就像new 操作符,但是他们的接口是不同的。



你的分配子是一个模板,模板参数T代表你为它分配内存的对象的类型。


提供类型定义pointer和reference,但是始终让pointer 为 T*,reference为T&。


千万别让你的分配子拥有随对象而不同的状态。通常,分配子不应该有非静态的数据成员。


记住,传给分配子的allocate成员函数的是那些要求内存的对象的个数,而不是所需的字节数。同时要记住,这些函数返回T*指针,及时尚未有T构造出来。


一定要提供嵌套的rebind模板,因为标准容器依赖该模板。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template Library》是一本由Scott Meyers撰写的经典书籍,旨在帮助读者更好地使用C++标准模板库(STL)。 这本书总结了50条关于STL的使用技巧和最佳实践。以下是其中的一些要点: 1. 使用STL容器时,确保在需要插入和删除元素时优先选择vector而不是list。因为vector在插入和删除操作上效率更高。 2. 当需要快速查找某个元素时,使用set或map等基于红黑树的容器。 3. 如果需要按照某个自定义的排序规则来对容器中的元素进行排序,可以使用set或者priority_queue。 4. 在迭代器失效的情况下,不要试图重新利用这些迭代器,而应该重新获取新的迭代器。 5. 使用算法库中提供的算法,如for_each、find、copy等,可以减少编写重复代码的工作。 6. 使用STL中的函数对象和函数适配器,可以更好地处理算法的复杂需求。 7. 使用STL中的智能指针(如shared_ptr和unique_ptr)来管理动态分配的内存,可以避免内存泄漏的问题。 8. 避免使用裸指针和new/delete操作符,在可能的情况下使用STL中的容器和智能指针。 9. 使用STL提供的容器适配器,如stack、queue和priority_queue,可以方便地实现特定功能的容器。 10. 注意STL中的异常处理机制,正确处理异常可以提高程序的健壮性。 总之,通过学习并遵循《Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template Library》中的技巧和最佳实践,我们可以更有效地利用STL,提高程序的性能和可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值