C++ 现代字符串指针

标签 c++ string c++11 pointers

是否建议在现代 C++ 字符串上使用指针? 像这样:

std::string *test = new string();
anyfunction(test);

test变量中是一个很长的文本。所以我想,使用指针进行操作会更容易、更快。

这是好代码还是坏代码?

最佳答案

总的来说,这是一个非常糟糕的想法 - 原因有两个:

第二个原因:您正在使用手动堆分配,而没有将其包装在智能指针中。但添加例如std::unique_ptr 只是在症状上贴上创可贴。

主要原因:您的思考方向是正确的(避免不必要地复制大量垃圾数据),但您使用了错误的工具。函数参数的类型是正确的工具。

函数只需要读取字符串吗?那么它的签名应该是:

return_type anyfunction(const std::string& test);

通过 const ref 传递不会复制字符串。如果您还需要写访问权限,请省略 const:

return_type anyfunction(std::string& test);

同样,没有复制。将字符串移动到函数中也可能是一种选择。但如果没有进一步的背景,很难说。

关于C++ 现代字符串指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41200822/

相关文章:

c++ - 检测元组中的引用类型

c++ - 确保所有字节都正确写入文件

c++ - 在 QLCDNumber 上设置厚度

通过双指针字符串的引用调用

javascript - 为什么 Javascript ===/== 字符串相等有时具有常数时间复杂度,有时具有线性时间复杂度?

c++ - 在清除之前检查一个 vector ?

c++ - 给定代码中是否存在未定义的行为?

c++ - 如何在读取 STDIN 时获取 llvm::MemoryBuffer 的内容?

c++ - 共享对象符号解析

javascript - 设置 Ace 编辑器值时保留缩进