Cha*_*hap 2 c++ copy-constructor temporary-objects move-semantics
MemRef是一个小对象,包含指向内存的指针和长度.它是优化项目的核心,可以最大限度地减少关键部分中的字符串复制.令牌是一个deque<MemRef>.
当我在输入缓冲区中识别标记时,我想构造MemRefs并将它们添加到令牌deque中.首先尝试的是:
MemRef foo(token_begin, token_len);
tokens.push_back( foo );
Run Code Online (Sandbox Code Playgroud)
自从我在这里看到dtor调用以来,它让我觉得foo正在创建,复制,然后被破坏.接下来的尝试是:
tokens.push_back( MemRef(token_begin, token_len) );
Run Code Online (Sandbox Code Playgroud)
但我看到了同样的行为.我的猜测是,正在创建一个临时文件,复制到双端队列中,然后销毁,这也许就是"移动语义"主题的来源(我很不清楚).
实际上,有没有办法MemRef直接构建令牌双端队列,而不创建和销毁临时?
(我正在使用Apple LLVM版本5.0(clang-500.2.79)和--std = c ++ 11)
小智 5
用途emplace_back:
tokens.emplace_back(token_begin, token_len);
Run Code Online (Sandbox Code Playgroud)
这将构建一个MemRef就地.请注意,这仅适用于c ++ 11.
| 归档时间: |
|
| 查看次数: |
215 次 |
| 最近记录: |