为什么我的 const ref 在此代码中变得无效以及如何避免这种情况?我无法复制,这是我应用程序的瓶颈。
class Foo {
public:
const std::string& string() const {
return string;
}
private:
std::string string = "asdf";
};
Foo foo;
std::vector<std::pair<const std::string&, int>> invalid;
for (int i = 0; i < 5; i++) {
invalid.emplace_back(std::make_pair(foo.string(), i);
// after this line invalid[i].first is invalid
}
最佳答案
Igor Tandetnik 已经指出了您代码中的问题。 FWIW,我认为在任何情况下让容器通过引用来引用其他对象的成员都不是一个好主意——这隐含地依赖于对象的相对生命周期。您可以考虑使用 shared_ptr
to const string
,如下所示:
#include <string>
#include <memory>
#include <vector>
class Foo {
public:
const std::shared_ptr<const std::string> string() const {
return _string;
}
private:
std::shared_ptr<std::string> _string = std::make_shared<std::string>("asdf");
};
int main()
{
Foo foo;
std::vector<std::pair<std::shared_ptr<const std::string>, int>> invalid;
for (int i = 0; i < 5; i++) {
invalid.emplace_back(std::make_pair(foo.string(), i));
}
}
关于c++ - 为什么我的 const ref 无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36235944/