como eliminar un objeto singleton

Asumiendo esta implementación de un patrón de singleton (por supuesto, deberíamos evitar Singleton: es solo una pregunta), acabo de pensar en la creación de un objeto estático. Se crea en un montón por unnew Operador, claro, pero ¿cómo se destruye esto? En el siguiente ejemplo tenemos una fuga, por lo que¿Cómo se debe implementar la eliminación de objeto singleton estático? ¿Debería haber unplease_delete() interfaz pública adoptada, por lo que uno puede llamarmyC->please_delete() o hay otra manera de lograr esto?

class CC{
public:
    static CC* cObj(){
        if(c_ptr==NULL){
            c_ptr=new CC();
            return c_ptr;
        }else return c_ptr;
    }
    int getValue(){return value_;}
    void setValue(int val){value_=val;}
    ~CC(){cout<<"~CC";}
private:
    CC():value_(12345){cout<<"CC";}
    static CC* c_ptr;
    int value_;
};
// Allocating and initializing CC's
// static data member.  The pointer is being
// allocated - not the object itself.
CC *CC::c_ptr = 0;

int main(){
    //Singleton pattern
    CC* myC = CC::cObj();
    cout<<myC->getValue();
    return 0;
}

salida: cc12345

EJECUTAR CON ÉXITO (tiempo total: 67ms)

Noté que, de hecho, siempre podemos declarar una instancia estática de singleton dentro deshared_ptr Al igual que conboost::shared_ptr<CC> bCptr(CC::cObj()); ¿Pero el patrón de Singleton no menciona el problema de la eliminación del objeto en absoluto, por lo que tal vez exista algún otro enfoque?

Respuestas a la pregunta(3)

Su respuesta a la pregunta