use emplace_back when possible to avoid creating/destructing temporary objects