我有一个具有 3-4 个类型的数据成员的类std::map<string, vector<string>>
,用于缓存数据。它的实例被创建一次,并且数据被填充到来自服务调用的所有映射中。我有用于访问这些地图的 getter 函数。(这也有一些线程锁定逻辑)
这些 getter 函数被调用了很多次,我担心地图对象被复制很多次时的性能。
class A {
private:
map<string, vector<string>> m1;
map<string, vector<string>> m2;
map<string, vector<string>> m3;
public:
map<string, vector<string>> getm1() { return m1; }
map<string, vector<string>> getm2() { return m2; }
map<string, vector<string>> getm3() { return m3; }
}
class B {
B() { }
static A a;
map<string, vector<string>> getm1() { return a.m1; }
map<string, vector<string>> getm2() { return a.m2; }
map<string, vector<string>> getm3() { return a.m3; }
}
这些 getter 函数多次从 class 调用B
。对 cpp 有中级知识,我知道 getter 会按值返回整个映射。但是,最好是通过引用传递它还是使用指向映射的共享指针(例如存储成员变量m1
, m2
)m3
作为shared_ptr<map>
shared_ptr<map<string, vector<string>>> getm1() { return a.m1; }
这不是性能问题,编译器会处理吗?
在阅读了一些关于返回值优化的内容并稍微理解之后,编译器可以处理一些优化。这是 RVO 的一部分吗?
先感谢您。