【发布时间】:2010-07-10 16:21:15
【问题描述】:
考虑以下代码sn-p:
list<someClass>& method();
....
list<someClass> test = method();
这会是什么行为?请问这个代码:
从method()返回值优化返回的someClass实例的引用,然后对该引用执行someClass的复制构造函数?
避免以某种方式调用复制构造函数?
具体来说,我有一些方法会返回非常大的列表,我想避免在每个返回值上调用复制构造函数。
编辑:Erm,对不起,代码现在编译...
【问题讨论】:
-
嗯?那甚至不会编译。没有从
std::list<t>到t的隐式转换。如果您关心性能,则无论如何都应该使用vector或deque而不是列表。 -
与任何关于优化的问题一样,唯一真正的答案是检查您的特定代码的汇编器输出。
-
你的意思是`method().front()
? You will also have to make sure that the list object to which the returned list reference points to stays alive after the execution ofmethod()`. -
@Billy :因为他没有给出
someClass的定义,所以无法判断这是否会编译。如果你不知道他将如何使用它,那么知道他的数据结构不是最理想的有点冒昧:) -
struct someClass { someClass(std::list<someClass>&); };?
标签: c++ stl copy-constructor