Template instantiations require the full definitions to be visible to the compiler, so there is little point to separating the header file from the implementation file.
Basically, you should collapse your obj_file_loader.cpp into your obj_file_loader.h file. Or #include "obj_file_loader.cpp" within the header file.
Your issue looks like it comes down to object lifetime and how memory is being handled inside the loop. Using references instead of copies might clean this up. When I step away from debugging for a bit, I sometimes reset with quick distractions like https://casinosanalyzer.com/free-slots-online/3-Witches . Coming back fresh usually makes the solution obvious.