What if I don't want other units to create and destroy objects? Of course, if a unit contains the description of only one class, the constructor and destructor will necessarily be called from outside, so that they must be public. But I often build units with an "elementary" class and a specialized container class. Then it makes sense to make the constructor private: the container class is the only in charge of creating or destroying instances, but the instances may be otherwise manipulated by the rest of the application. This way of doing things helps me ensure I don't forget to destroy an instance.
Edit: I meant "container" in the technical sense, like a TObjectList descendant.