Creating an "engine" with SFML: Is it worth it?
On top of that, you want a resource loader, check out part 9 of the tutorial linked in my sig for an example. Generally a simple std::map with the file name as a key and the file or file path as the value would suffice. This system makes it easy to load resources in advance as well as makes caching simple.
What's "normally" done depends on the game (and the size of it). A studio making a AAA game will likely invest in building many tools that will handle packaging, loading, finding, and updating game assets. A smaller studio, independent developer, or hobbyist might not have the resources or time to put into making such fancy tools, so they do whatever works for them (whether or not it's something that would be considered ideal by others).
I started an interesting thread once about packed asset files in which some members discussed their team's/company's workflow and how it handles various assets. I think you might enjoy reading some of the responses there (whether or not you use packed asset files; the general workflow of "the pros" is interesting to read at the very least).