Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++现代字符串指针 推荐使用现代C++字符串上的指针吗? 像这样: std::string *test = new string(); anyfunction(test);_C++_String_C++11_Pointers - Fatal编程技术网

C++现代字符串指针 推荐使用现代C++字符串上的指针吗? 像这样: std::string *test = new string(); anyfunction(test);

C++现代字符串指针 推荐使用现代C++字符串上的指针吗? 像这样: std::string *test = new string(); anyfunction(test);,c++,string,c++11,pointers,C++,String,C++11,Pointers,在测试中,变量是一个很长的文本。所以我想,用指针操作会更容易、更快 这是一个好的还是坏的代码? 在现代C++中不推荐使用原始指针。C++11中有四个智能指针-std::auto_ptr、std::unique_ptr、, std::shared_ptr和std::weak_ptr。 所有这些都旨在帮助管理动态分配对象的生命周期,即通过确保在适当的时间以适当的方式销毁此类对象来避免资源泄漏,包括 在例外情况下。一般来说,这是一个非常糟糕的主意− 原因有二: 第二个原因:您正在使用手动堆分配,而没有

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


这是一个好的还是坏的代码?

在现代C++中不推荐使用原始指针。C++11中有四个智能指针-std::auto_ptr、std::unique_ptr、, std::shared_ptr和std::weak_ptr。 所有这些都旨在帮助管理动态分配对象的生命周期,即通过确保在适当的时间以适当的方式销毁此类对象来避免资源泄漏,包括 在例外情况下。

一般来说,这是一个非常糟糕的主意− 原因有二:

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

主要原因:您正朝着正确的方向思考,避免不必要的大数据量拷贝,但您使用了错误的工具。函数参数的类型是正确的工具

函数是否只需要读取字符串?则其签名应为:

return_type anyfunction(const std::string& test);
通过const ref传递不会复制字符串。如果您还需要写访问权限,请省去常量:


同样,没有复制。将字符串移动到函数中也可能是一个选项。但是没有进一步的上下文很难说。

std::string基本上是在堆上创建的。一些优化版本会在堆栈上创建短字符串以提高速度,但这不是问题

不建议使用new创建,因为对象超出范围时无法自动销毁。有时你想要这种行为,但这是罕见的,你真的应该认为新的过时,开始C++程序员。而且它不会对堆栈的使用产生实质性的影响,因为堆栈上只有几个微不足道的控制变量

您还没有演示如何初始化它。或者您打算如何使用这些数据。虽然传递const std::string&实际上只是传递指针的替代符号,但它更为惯用。然而,现代C++正在移动到字符串视图。基本上,您创建字符串,然后在数据上创建视图。如果字符串很长,这可能很重要。例如,如果长字符串是胖数组,则在长字符串上搜索短子字符串非常耗时,如果是后缀树,则搜索速度非常快

字符串视图仍处于试验阶段:
使用指针意味着另一个间接层次。C++ 11具有移动语义,意味着可以轻松地移动字符串的副本而不做深层拷贝,这主要是删除了对新的字符串或任何C++ C++对象的需要。例如std::字符串测试;void anyfunctionconst std::string&s;是否建议在现代C++字符串上使用指针?不,永远不要那样做。在我写的C++代码的最后一百万行中,我没有做过一次。AutoTypTR已经被弃用。在这种情况下,最好的建议是不要使用指针。请注意,自从C++11以来,指针就被弃用了,C++17中没有指针。我可以用什么来代替std::auto_ptr?因为我听说它被弃用了。是的,我同意。auto_ptr已弃用。@Hball:std::unique\u ptr做std::auto\u ptr做的一切,还有更多。它可以高效地进行复制,而且不会扭曲复制对象的含义。它在各个方面都比std::auto_ptr好
return_type anyfunction(std::string& test);