我是 Rust 的初学者,正在尝试了解 String
类型。
我只是想知道在 .push_str()
之前执行 .clear()
以推送更大的字符串是否安全,IE:我能保证吗尽管使用相同的指针,但每次系统都能增加容量?是否有(可能有)更好、可能更安全的方法来用更大的字符串覆盖字符串?
最佳答案
一步一步:
-
String::clear()
非常安全并设置内部Vec
(因为这就是String
背后的原因)大小(不是容量)为零 -
String::push_str()
然后将您输入的任何内容附加到该零大小Vec
的末尾,确保在它溢出时重新分配足够的空间。因为类型本身就是&str
你可以非常确定它会起作用。
唯一可能的情况如下:因为String
是一个拥有的类型并且 &str
是不可变的借用,你的内存使用在push_str()
之后将增加 &str
的大小你喂它除非你的String
由 Vec
支持容量大于&str
.这是可以预料的。如果您没有,您的代码将(显然)触发 OOM。
所以,是的,它是绝对安全的,老实说,如果你真的有 &mut String
,这是最好的方法而不是 String
本身:-)
关于string - 在 Rust 中 .clear() 然后 .push_str(String) 安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57835026/