diversi punti:
C permette puntatori void siano implicitamente convertiti in qualsiasi altro tipo di puntatore oggetto. Il C++ no.
Lanciare il risultato di malloc()
in C interromperà una diagnostica utile se si dimentica di includere stdlib.h o altrimenti non si dispone di una dichiarazione per malloc()
in ambito. Ricorda che se C vede una chiamata di funzione senza una dichiarazione precedente, assumerà che la funzione restituisca int
. Se non si dispone di una dichiarazione per malloc()
e si omette il cast, si otterrà una diagnostica per l'effetto che si sta tentando di assegnare tipi incompatibili (int al puntatore). Se si esegue il cast del risultato, si sopprime la diagnostica e potenzialmente ci sono problemi di runtime, poiché non è garantito che la conversione di un valore del puntatore in un int e di nuovo in un puntatore di nuovo fornirà un risultato utile.
Se stai scrivendo C++, dovresti utilizzare new
e delete
anziché malloc()
e free()
.Sì, sì, sì, ho sentito tutti i motivi per cui le persone vogliono che il loro codice venga compilato come C e C++, ma i vantaggi dell'utilizzo del giusto strumento di gestione della memoria per la lingua superano i costi di mantenimento di due versioni IMO.
Nota: il tipo void *
è stato aggiunto nello standard C89; le versioni precedenti di C avevano malloc()
restituiscono char *
, quindi in quelle versioni il cast era obbligatorio se si assegnava il risultato a un tipo di puntatore diverso. Quasi tutti supportano almeno lo standard C89, quindi le probabilità che tu entri in una di quelle vecchie implementazioni sono molto, molto basse.
fonte
2010-08-13 14:44:22
C++ essendo più sensibile al tipo richiede di specificare il tipo esatto tramite un cast. – Abhay
Questo non è direttamente correlato alla tua domanda, ma penso che tu voglia 'sizeof (int)', non 'sizeof (int *)'. Detto questo, è ancora meglio usare 'sizeof * int_ptr', che garantisce che verrà assegnata la giusta quantità di memoria per qualsiasi tipo di puntamento a" int_ptr ". – bcat
Perché dovresti usare malloc in C++? – SoapBox