c – 通过指针获取装饰char *和char const *:良好的做法?
您好我想向公众推荐我做一个字符串类(比如std :: string)的想法,该字符串类具有能够处理客户端提供的缓冲区的功能.
您预见到的危险是什么?这是经典的气味吗? etcaetera 我的意思是这样的: char ext[64] = {0}; my::string s(ext,my::string::acquire_RW); size_t len = s.size(); size_t pos = s.find("zboub"); my::string s2(s); // uses true (alloc+)copy semantic here. 所以我预见了两个策略:acquire_RW和acquire_RO,允许修改ext中的字符.在任何非const方法的RO情况下,以及必须扩展缓冲区的方法中的RW情况;它会分配&此刻只复制. 在某种程度上,my :: string类型成为char *类型的装饰器. 当然,在装饰器作为客户端的要求之前,要小心不要释放外部缓冲区. 感谢您分享您的疑虑 解决方法
“良好实践”的答案很难.我会说,一般不是很好的做法,但对于一些特定的用例非常好的做法.这一切都取决于您在提供的内存的生命周期内如何信任客户端.一般来说:没有信任.在特殊情况下:好的.
有一个相当重要的事情要考虑性能: 您是否计划使用已分配的字符串变体的隐式共享(带写入和引用计数的副本)?或者你打算使用价值语义(总是复制,永远不参考)? 在多处理器和多线程环境中,值语义是字符串的首选方式.多线程环境中必要的锁定会破坏使用隐式共享的性能提升. 请注意,即使在多线程的情况下,您的建议仍然有意义:从外部存储器到分配的变体(无需锁定),以及从此开始的值语义(也无需锁定),您可以完美地使用写时复制.这是最好的. 我想你的变体在非常具体的用例中运行良好,例如你用一些字符串对一些文件进行内存映射,你不想存储这些小字符串和片段内存的副本. 但是,在一般情况下,我不会担心,只使用std :: string. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- xml – XPath查找具有特定子节点的所有元素
- C#操作读取、写入XML文档的实用方法
- c – boost.proto在构建表达式树之前检测无效终端
- mongo用户名和密码配置cmd+mongodbmanager
- 使用iOS 10.3.3和Xcode版本8.2.1?
- ruby-on-rails – 如何使用Rails 5.1.0和jQuery
- 基本零配置的 Webextension 脚手架,用 React Ty
- react native 实战系列教程之热更新原理分析与实
- 关于openwrt-SDK编译package时需要依赖库(sqlite
- Oracle Performance: SDU, SEND_BUF_SIZE and RE