English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C++构造函数中使用new时的注意事项

Problemi riscontrati quando si inizializza un oggetto con new per i membri puntatori

Utilizzando new per inizializzare i membri puntatori nel costruttore, il distruttore deve utilizzare delete, e new deve corrispondere a delete, new[] deve corrispondere a delete[].

In presenza di più costruttori, devono essere utilizzati nello stesso modo, o non devono utilizzare new né new[], perché esiste solo un distruttore, tutti i costruttori devono essere compatibili con il distruttore.

PS. Certo, quando si inizializza un puntatore con new nel costruttore, si può inizializzare il puntatore a vuoto (0/NULL o nullptr in C++11), perché delete è compatibile con un puntatore nullo sia con [] che senza [].

Devi definire manualmente un costruttore di copia e un costruttore di assegnazione, inizializza un oggetto con un altro oggetto utilizzando il metodo di copia profonda, come segue:

Costruttore di copia:

  • Assegna spazio sufficiente per memorizzare i dati copiati
  • La copia dei dati non riguarda solo l'indirizzo
  • Aggiorna i membri statici influenzati
String:String(const String & st)
{
  num_Strings++;
  len = st.len;
  str = new char[len+1];
  std::strcpy(str, st.str);
}

Costruttore di assegnazione:

  • Controlla la situazione di copia di sé stesso
  • Rilascia il puntatore membro prima di puntare alla memoria
  • La copia dei dati non riguarda solo l'indirizzo
  • Restituisce un riferimento all'oggetto chiamante
String & String:operator=(const String & st)
{
  if(this == &st)
    return *this;
  else
    delete [] str;
    len = st.len;
    str = new char[len+1];
    std::strcpy(str, st.str);
  return *this;
}

Questo è tutto il contenuto dell'articolo, spero che il contenuto di questo articolo possa aiutare tutti a imparare o lavorare in qualche modo, e spero anche di ottenere molto sostegno per il tutorial Yell!

Dichiarazione: il contenuto di questo articolo è stato preso da Internet, il diritto d'autore spetta al proprietario originale, il contenuto è stato contribuito e caricato autonomamente dagli utenti di Internet, questo sito non possiede il diritto di proprietà, non è stato editato manualmente e non assume responsabilità per le relative responsabilità legali. Se trovi contenuti sospetti di violazione del copyright, ti preghiamo di inviare una e-mail a: notice#oldtoolbag.com (al momento dell'invio dell'e-mail, sostituisci # con @) per segnalare, fornendo anche prove pertinenti. Una volta verificata, questo sito eliminerà immediatamente il contenuto sospetto di violazione del copyright.