for managing instances of a class. the object being created with CBotVar :: Create (name, pClasse) is to keep as is, outside the vars on the stack we need another type of variable to keep the pointers For example CBotTypPtClass The instance of the class must have a usage count which is the number of class object to which they refer CBotTypPtClass. The counter is decremented when the pointer is destroyed, be deleted when there is more pointers. In the case of robots, Daniel creates an instance of class "Object" and can return pointers to this proceeding by routines such FindRobot () Object FindRobot (int n) {} pResult in this case is a pointer CBotTypPtClass when he found the robot concerned, it must make pResult-> SetPointeur (InstanceDeLaClassObject); this operation increments the reference - when the robot is destroyed, the instance of the Object class corresponding is also destroyed. if there are pointers to that object, and we planted the risk Solution 1: not keep the pointer to the object directly, but an index into a table of pointers Solution 2: not destroy the object when there imédiatement pointers but marked as virtually destroyed