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;