(defclass singleton-class (standard-class)
  ((uniqueInstance :accessor getUniqueInstance :initform nil))
  (:metaclass standard-class))

(defmethod make-instance ((newC singleton-class) &rest initargs)
  (print 'called)
  (let ((x (getUniqueInstance newC)))
    (if (eq x nil)
	(let ((newI (call-next-method)))
	  (print 'enCoursDeCreation)
	  (setf (getUniqueInstance newC) newI)
	  newI)
      (progn (print 'existeDeja)
	x))))

(defclass test (standard-object)
  ((x :initvalue 33)) ;;pas d'attributs
  (:metaclass singleton-class))

;;(print (getUniqueInstance 'test))

(make-instance 'test)

(eq (make-instance 'test) (make-instance 'test))