gpt4 book ai didi

c++ - 使用引用的类字符串 setter

转载 作者:行者123 更新时间:2023-12-02 10:18:11 25 4
gpt4 key购买 nike

如果一个类具有字符串属性,并且该属性的设置方法采用const std::string&,那么是否存在字符串超出范围的风险?

class Foo {
public:
std::string name;
void SetName(const std::string &name){
this->name = name;
}
};

那这里发生了什么
{
//...
std::string name = "name";
foo.SetName(name);
} // name goes out of scope

这似乎工作正常,但对我来说没有意义。如果我传递了对其他任何东西的引用或指针,那么我将遇到很大的问题。 std::string有什么特别之处吗?

最佳答案

Is there a risk of the string going out of scope?



否,因为分配会复制数据。

This seems to work fine but it doesn't make sense to me. If I passed a reference to anything else, or a pointer, I would have big problems. Is there something special about std::string?



不,对于任何种类的物体都是如此。关键是要在成员函数内部复制引用对象,而引用仍然有效。在那之后发生什么都没关系。

一种更现代的方法是:
class Foo {
public:
std::string name;
void SetName(std::string name){
this->name = std::move(name);
}
};

现在,函数主体执行移动而不是复制;复制现在是在按值函数参数中完成,除非调用范围使用 std::move!这样,您不必强制复制不需要复制调用范围的数据。

关于c++ - 使用引用的类字符串 setter ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61233164/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com