MemRef
是一个小对象,包含指向内存的指针和长度。最大限度地减少关键部分中的字符串复制是优化项目的核心。 token 是 deque<MemRef>
。
当我识别输入缓冲区中的标记时,我想构造 MemRef
s 并将它们添加到 token 双端队列中。第一次尝试是:
MemRef foo(token_begin, token_len);
tokens.push_back( foo );
因为我在这里看到 dtor 调用,所以它告诉我 foo 正在被创建、复制,然后被销毁。下一次尝试是:
tokens.push_back( MemRef(token_begin, token_len) );
但我看到了同样的行为。我的猜测是,正在创建一个临时对象,将其复制到双端队列中,然后销毁,也许这就是“move 语义”主题的用武之地(我对此非常不清楚)。
有没有办法实际上构建 MemRef
直接进入 token 双端队列,而不创建和销毁临时的?
(我使用 Apple LLVM 版本 5.0 (clang-500.2.79) 和 --std=c++11)
最佳答案
关于c++ - 调用 vector.push_back() 时避免复制构造函数/析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20343234/