【问题标题】:Set constructor copying by reference?通过引用设置构造函数复制?
【发布时间】:2014-04-08 15:43:50
【问题描述】:

此代码是通过引用复制 comp 还是每次都复制整个对象?

如果在某些时候有整个对象的副本,是否有另一种编码方式来避免这些副本?

Comparator comp(3);

set<string, Comparator> s1(comp);
set<string, Comparator> s2(comp);
set<string, Comparator> s3(comp);
set<string, Comparator> s4(comp); 

Cpp 参考声明:

容器保留了 alloc 和 comp 的内部副本,用于 在其整个生命周期内分配存储空间并对元素进行排序。

但构造函数看起来像是在做引用复制

explicit set (const key_compare& comp = key_compare(),
              const allocator_type& alloc = allocator_type());

我是 C++ 新手,我想确定一下。我不知道如何检查

【问题讨论】:

  • 它需要一个const key_compare&amp;,这样你就可以传递一个临时的。你也可以try it out 看看比较器的大小确实有影响。
  • 再次感谢。看来我今天需要为所有这些答案付钱给你:)

标签: c++ templates stl set functor


【解决方案1】:

构造函数接受一个 const 引用,但它创建了比较器的内部副本(使用该引用)。您示例中的每个集合都有自己的 comp 副本。

【讨论】:

  • 谢谢+1。我现在知道了。但是是否有另一种编码方式来避免这些副本?
  • @IssamT。不在设置界面。也许你可以让你的比较器以某种方式共享数据?
  • 好吧,我不知道this 是否合法,但它有效:)
  • @jrok hah 有趣的想法 :) 我只是想知道是否仍在创建副本。也许应该对内存使用情况进行基准测试?
  • 嗯,是的,恐怕我不能做得比比较器内的指针指向一个包含我不想每次都复制的参数的结构更好。但这增加了一定程度的复杂性,并使代码不那么直观
猜你喜欢
  • 1970-01-01
  • 2014-01-29
  • 2023-03-22
  • 1970-01-01
  • 2017-09-11
  • 2012-06-17
  • 1970-01-01
  • 2010-10-08
  • 1970-01-01
相关资源
最近更新 更多