push_back vs emplace_back: cuál es la diferencia y cuál elegir
¡Saludos, colegas! Soy un desarrollador C++ principiante y recientemente me enfrenté a un dilema: ¿cuándo usar push_back y cuándo emplace_back? \n\nTengo una clase simple:\n\n```cpp\nclass MyClass {\npublic:\n MyClass(int x, int y) : x_(x), y_(y) {}\nprivate:\n int x_, y_;\n};\n```\n\nAgrego objetos al vector de dos maneras:\n\n```cpp\nstd::vector vec;\n\n// Método 1\nvec.push_back(MyClass(10, 20));\n\n// Método 2\nvec.emplace_back(10, 20);\n```\n\nAmbos funcionan, pero he oído que emplace_back es más rápido. ¿Qué tan crítico es esto? ¿Hay casos en los que push_back sea preferible? ¿O emplace_back siempre es mejor?\n\nMe interesa especialmente: ¿qué sucede con los objetos temporales, la move-semántica y la copia? En internet hay mucha información contradictoria, me gustaría obtener una respuesta clara de desarrolladores experimentados. ¡Gracias!\n<<>>\n
Diferencia principal: dónde se crea el objeto
\n\nLa principal diferencia entre push_back y emplace_back radica en el lugar de creación del objeto.