Ho scritto una classe Rand una volta che gestisce la generazione di numeri casuali. Se ho passato un'istanza Rand in una funzione in base al valore, l'oggetto Rand originale non aggiornava il suo stato iniziale quando il valore copiato ha generato numeri. Naturalmente, avrei potuto rendere lo stato seme allocato da qualche parte non nell'oggetto stesso (come nell'heap). Invece, volevo passare Rand oggetti per riferimento. Per evitare di passarli accidentalmente per valore, ho disabilitato il suo costruttore di copia e l'operatore di assegnazione (rendendoli privati).
Ora volevo che l'utente fosse in grado di copiare effettivamente un oggetto Rand . Ma questo richiede un po 'più di lavoro dal momento che il costruttore di copia e gli operatori di assegnazione erano privati. La mia soluzione era creare una funzione membro RandForwarder Rand::clone() , dove RandForwarder era una classe di amici di Rand in modo che potesse accedere a quei membri privati. Ho anche dato a Rand un costruttore pubblico che ha preso un RandForwarder e un operatore di assegnazione di RandForwarder in modo che gli utenti potessero farlo: Rand r2 = r1.clone(); whille disabilitando Rand r2 = r1;