c++ - 引用对象的 STL 容器

标签 c++ stl reference pass-by-reference

我知道 STL 容器会复制对象。所以说我有一个

list<SampleClass> l;

每当我这样做时

SampleClass t(...);
l.push_back(t);

将制作 t 的拷贝。如果 SampleClass 很大,那么开销会很大。

但如果我将 l 声明为引用容器,

list<SampleClass&> l;

当我这样做时

l.push_back(t);

它会避免复制对象吗?

最佳答案

如果您知道自己在做什么,则可以使用 std::reference_wrapper:

制作引用 vector
#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/

相关文章:

c++ - 确定阴阳穴位

c++ - 如何在应用程序退出时诊断访问冲突

c++ - 在具有预分配 block 的自定义 STL 分配器中重新绑定(bind)

c++ - 使用 VS2013 x64 为 libmimetic(模拟)库构建 exbin 示例时出现 C2784 错误

c++ - 在 C++ 中的函数名前使用 '&' 运算符

c++ - C++ reference_wrapper vector 使用错误的值填充

C++ undefined reference 类构造函数

c++ - 如何初始化节点为矩阵的链表?

c++ - 链接列表的成员值意外更改

c++ - 为什么在使用 map.begin() 时迭代器会预递增?