Diciamo che ho una classeQual è la differenza tra non implementare ed eliminare operatori comuni?
class Object
{
public:
Object(int i) : num(i) {};
int getNum() const { return num; }
private:
int num;
};
Ora, se provo a fare questo
Object obj{ 1 };
Object obj2{ 2 };
Object obj3 = obj + obj2; //This is wrong
Questo è illegale: 'Object' does not define this operator or a conversion to a type acceptable to the predefined operator
.
L'aggiunta di Object operator+(const Object&) = delete;
non modifica nulla, ad eccezione del messaggio di errore: 'Object Object::operator +(const Object &)': attempting to reference a deleted function
.
Il delete
è necessario solo per gli operatori che hanno una dichiarazione implicita (come l'operatore di assegnazione e il costruttore di copia/spostamento) o cambia qualcos'altro nel mio caso?
Penso che il motivo principale è stato aggiunto alla lingua è stata per prevenire la copia o lo spostamento in modo esplicito. – karakfa
Questo è quello che ho pensato anch'io, ma se è permesso ci deve essere una ragione. – Rakete1111