Say I have an inheritance tree, and I want to not be able to create objects of the class which is near the top of the tree. I could have a pure virtual function in the class, but what if I didn't want to redefine the function in all the derived classes ( a necessity for pure virtual functions) - is there any other way?
The protected constructor is a technique I use quite often. It sounds like it is exactly what you want.
If all constructors are protected, you can only create objects of derived classes with public constructors. Just make sure you have a virtual destructor (it doesn't have to be pure virtual in this situation).
I've never tried the pure virtual destructor option that Vlad suggested. It would probably work, but I think the protected constructor idea represents what you are trying to do better. It fits better semantically.