The only problem with it currently is that the smart_class MUST be managed with smart_ptrs, if you try to 'delete' it, it will try to delete itself and crash.
This seems like a problem that could be overcome through overloading the "delete" operator. Perhaps if you declared your delete operator as protected (or private), and then made the smart pointers you wanted to use friends? That would force you to use a specific set of smart pointer classes, but that doesn't sound like it would be a problem in your case. It's fixing the symptom rather than the disease, but is better than nothing. Turning runtime errors into compiletime errors is always a Good Thing. --Mark Storer Software Engineer Cardiff Software #include <disclaimer> typedef std::disclaimer<Cardiff> Discard;