Per rispondere alla prima domanda: Sì, è saggio e obbligatorio includere le protezioni attorno alle classi di modelli. O più strettamente circostante l'intero contenuto di ogni file di intestazione.
Questo è il modo per obbedire alla regola di una definizione quando si dispone di elementi nei file di intestazione, in modo che siano condivisi e comunque sicuri. Potrebbero esserci altri file di intestazione che includono il tuo. Quando il compilatore compila un file di modulo, potrebbe vedere un numero #include
del tuo file di intestazione molte volte, ma le guardie eseguono il kick-in nella seconda e nelle successive volte per assicurarsi che il compilatore visualizzi solo il contenuto una volta.
Non importa che il compilatore ritorni a qualcosa; questo è il suo lavoro. Devi solo fornire i contenuti una volta e poi il compilatore l'ha visto e può fare riferimento ad esso tutte le volte che ha bisogno.
Aggiungo sempre guardie sempre, ci si abitua, dato che è una BUONA pratica. – Poni
Se fai qualche sviluppo su win32, includi '#pragma once' ogni volta che usi le guardie incluse. – KitsuneYMG
+1 per affermare che le istanze vengono eseguite utilizzando la struttura dati interna creata al momento della prima scansione – Otuken