Btw, I've noticed that some programmers generally make their method parameters const references (for example GetAsset(const std::string &name)). Is this just good practice to make parameters read-only that aren't meant to yield output?
Yes it specifies to the using programmer that this function will not mess with the parameters you pass into the function, by value semantics mean the same so the const is only needed for pointers and references.
The other benefit is that if you pass a big class through a reference is that it doesn't need to make a stack copy of that object to pass to the function, which makes the application faster. For example I had a bad copy in one of my asset loading functions, whilst what I wanted was an alias(reference), in debug asset loading was super slow untill I removed my copy of a std::vector.