Regola del tre (C++)La regola del tre è una regola empirica di programmazione in C++ per l'implementazione dei metodi predefiniti di una classe destinata alla gestione di risorse. Formulata originariamente da Marshall Cline nel 1991[1], afferma che se la classe definisce esplicitamente almeno uno tra distruttore, costruttore di copia e operatore di assegnamento, allora tutti e tre i metodi devono essere definiti esplicitamente.[2] C++11 introduce la semantica di movimento, tramite la quale un oggetto può appropriarsi delle risorse di oggetti temporanei, motivo per il quale la regola del tre viene estesa a regola del cinque con l'aggiunta del costruttore di spostamento (move constructor) e dell'operatore di assegnamento di spostamento (move assignment operator).[3] MotivazioneLe tre funzioni nella regola sono funzioni membro speciali e, se non sono definite esplicitamente, il compilatore genera automaticamente una loro implementazione predefinita con il seguente comportamento:[4]
La motivazione per la regola deriva dal fatto che l'implementazione esplicita di uno tra queste funzioni è di solito necessaria se una classe gestisce una risorsa che richiede allocazione o deallocazione non banali (ad esempio un puntatore ad una porzione di memoria allocata dinamicamente, un socket, un descrittore di file, etc.), e in tale caso è probabilmente necessario implementare le altre due per garantire correttamente il trasferimento o la duplicazione della risorsa in tutti i casi.[5] Note
|