ILostMyAccount,
based on your example above I'd like to point out about the tricky (well, not so much, but still) moment about managing the allocated resources. In your version the Engine doesn't *own* the
window, therefore it must not
delete it in the current scenario. It is OK, but you have to deal with deallocation somewhere *outside* in case it was allocated on the heap.
This adds an additional burden to remember that.
The problem is that if you allocate window on the stack like below:
sf::RenderWindow window(sf::VideoMode(800, 600), "SFML window");
Engine engine(&window);
you must not
delete it from anywhere.
But, keeping in mind that your Engine takes a window by pointer, it makes things worse (it is not clear whether or not it should perform deallocation).
Therefore, I'd suggest that your Engine handle all the work related to
window internally, i.e.: allocation and deallocation. In this case you won't need to remember about that moment, thus it'd lead to fewer possible mistakes.
Of course, it is personal and your approach works as long as you remember what you're doing.
Just my 5 cents.