Se io definisco un proprio operatore di assegnamento, che ha una firma diversa rispetto l'operatore di assegnazione di default normalmente generato:Quando l'operatore di assegnazione predefinito C++ diventa inaccessibile?
struct B;
struct A {
void operator = (const B& b) {
// assign something
}
};
fa l'operatore di assegnamento di default, in questo caso operator = (A&)
(o simili, mi corregga se sbaglio) diventare indefinito/inaccessibile?
AFAIK questo è vero per il costruttore predefinito, che non esiste, se definiamo qualche altro costruttore. Ma non sono davvero sicuro se questo è il caso per le altre impostazioni predefinite "magiche".
La ragione per cui lo chiedo: voglio evitare che il costruttore di copie predefinito venga accidentalmente chiamato tramite una conversione di tipo implicita. Se non esiste, non potrebbe mai accadere.
Grazie per il riferimento standard! Questo in realtà dice qualcosa di più dei miei esempi. – xtofl
Hai ragione. Cancellerò la mia risposta. –
@Neil, ti sei chiesto quale sia l'uso = l'impostazione predefinita potrebbe essere. Uno è quello di essere espliciti in ciò che è disponibile, un altro è quello di modificare l'accessibilità di un terzo è che permette di rendere l'implementazione non in linea pur garantendo che l'evoluzione della classe non lo infranga. Un'altra giustificazione è che la funzionalità è più ampia dell'ambito di competenza dell'assegnazione e non vi era alcun incentivo a fare un'eccezione anche se non fosse stata utile. – AProgrammer