![]() |
1
14
尽管有批评,我认为这是一个有效的问题。
这个
建议1: 首选非成员非朋友方法
既然这样说了,在国际化的这个时刻,我当然建议您设计一个支持
建议2:
支持
然后,内存分配方案上有许多点:
我个人会在这里选择“小字符串优化”(尽管它并不排斥其他两个),这仅仅是因为它很容易实现,而且实际上会使您受益(堆分配成本、引用问题的位置)。 另外两种技术在面对多线程时有点复杂,而且这些技术很容易出错,除非经过精心设计,否则不太可能产生任何真正的好处。 这就是我最后的建议: 建议3: 不要在尝试多线程支持时实现内部锁定 当在单线程上下文中使用时,它将减慢类的速度,并且不会产生像在多线程上下文中使用时那样多的好处。 最后,通过浏览现有的代码,您可能会找到适合自己口味的东西(或获得一些提示)。但我不保证展示“平滑”的界面:
|
![]() |
2
3
Effective STL
作者Scott Meyers对可能性进行了一些有趣的讨论
|
![]() |
3
2
根据“自定义”是什么(例如自定义分配器),您可以通过std::basic_string类的模板参数来执行此操作。 |
![]() |
4
2
Herb Sutter在 GotW #29 . 你可以先用它。 |
![]() |
5
1
从通用的角度来看,“新”字符串类理想地结合了std::string、cstring、qstring和其他方面的优点。随机数点:
|
![]() |
6
0
世界不需要另一个字符串类。这是作业吗?如果没有,使用
|
![]() |
7
0
std::string的问题是..你不能改变它。有时需要STD::字符串的基础知识,但不同意C++库的实现。 例如,使用线程安全引用计数意味着大量的锁定(或者至少是锁定的操作)。另外,如果您的大多数字符串都很短(因为您知道情况会是这样),那么您可能需要一个针对该用例进行优化的字符串类。 因此,即使您喜欢std::string API,或者至少已经学会了使用它,也有足够的空间来进行“竞争性实现”,这些实现或多或少都是工作技能。 powerdns希望有一个,因为我们目前传递了很多DNS主机名,其中大部分可以放在一个25字节的固定缓冲区中,这将减轻许多新的/删除的压力。 |
![]() |
AstralHex · 矩阵乘法代码工作不正常 4 月前 |
![]() |
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 4 月前 |
![]() |
Die4Toast · 递归调用成员箭头运算符-> 4 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 5 月前 |