instead of your resource handle you could use a boost.shared_ptr in the map and use weak_ptr's to 'observe' the resource. that way all your clients will be aware of a deleted pointer, because it will throw a boost::bad_weak_ptr when they try to use it.

http://www.boost.org/libs/smart_ptr/weak_ptr.htm

It will also ease your memory management in the Resource_Manager class (you won't have to manually delete your resources).

I know I tend to suggest either boost or the standard library in nearly every post on this board, but there's a reason for that... they pay me to do it! just kidding

One of the biggest problem with C++ is the tendency of it's users to reinvent the wheel (ala your resource_handle class, which is basically an auto_ptr). Boost and the standard library don't solve this (C++ still has no standard GUI, XML or networking libraries), but they go a long way.