MemRef
是一个小对象,包含指向内存的指针和长度。它是优化项目的核心,可以最大限度地减少关键部分中的字符串复制。令牌是deque<MemRef>
。
当我在输入缓冲区中识别标记时,我想构造MemRef
并将它们添加到令牌双端队列中。首先尝试的是:
MemRef foo(token_begin, token_len);
tokens.push_back( foo );
因为我看到dtor在这里打电话,所以它让我觉得 foo 正在创建,复制,然后被销毁。接下来的尝试是:
tokens.push_back( MemRef(token_begin, token_len) );
但我看到了同样的行为。我的猜测是,正在创建一个临时文件,复制到双端队列中,然后销毁,这也许就是“移动语义”主题的来源(我很不清楚)。
有没有办法实际上将MemRef
直接构造到令牌双端队列中,而不创建和销毁临时的?
(我正在使用Apple LLVM 5.0(clang-500.2.79)和--std = c ++ 11)
答案 0 :(得分:5)