MemRef
メモリへのポインタと長さを含む小さなオブジェクトです。クリティカル セクションでの文字列のコピーを最小限に抑えることは、最適化プロジェクトの中心です。トークンはdeque<MemRef>
.
MemRef
入力バッファーでトークンを識別したら、 s を作成してトークン両端キューに追加したいと考えています。最初の試みは:
MemRef foo(token_begin, token_len);
tokens.push_back( foo );
ここで dtor 呼び出しを見たので、fooが作成され、コピーされ、その後破棄されていることがわかりました。次の試みは:
tokens.push_back( MemRef(token_begin, token_len) );
しかし、私は同じ行動を見ました。私の推測では、テンポラリーが作成され、deque にコピーされてから破棄され、おそらくこれが「移動セマンティクス」の対象になるところです (これについてはよくわかりません)。
MemRef
実際、一時的なものを作成および破棄せずに、トークンの両端キューに直接構築する方法はありますか?
(私は --std=c++11 で Apple LLVM バージョン 5.0 (clang-500.2.79) を使用しています)