我知道 STL 容器会复制对象。所以说我有一个
list<SampleClass> l;
每当我这样做时
SampleClass t(...);
l.push_back(t);
将制作 t 的拷贝。如果 SampleClass 很大,那么开销会很大。
但如果我将 l 声明为引用容器,
list<SampleClass&> l;
当我这样做时
l.push_back(t);
它会避免复制对象吗?
最佳答案
如果您知道自己在做什么,则可以使用 std::reference_wrapper
:
#include <functional>
#include <vector>
int main()
{
std::vector<std::reference_wrapper<int>> iv;
int a = 12;
iv.push_back(a); // or std::ref(a)
// now iv = { 12 };
a = 13;
// now iv = { 13 };
}
当然,请注意,如果任何被引用的变量超出范围而您仍然持有对它们的引用,那么这一切都会让您崩溃。
关于c++ - 引用对象的 STL 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7707842/