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

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

Les problèmes rencontrés lors de l'initialisation des membres pointeurs d'un objet à l'aide de new

Lors de l'initialisation des membres pointeurs à l'aide de new dans le constructeur, le destructeur doit utiliser delete, et new doit correspondre à delete, new[] doit correspondre à delete[].

Dans le cas d'un nombre multiple de constructeurs, il est nécessaire d'utiliser new de la même manière, ou ne pas utiliser new, ou ne pas utiliser new[], car il n'existe qu'un seul destructeur, tous les constructeurs doivent être compatibles avec le destructeur.

PS. Bien sûr, lors de l'initialisation des pointeurs à l'aide de new dans le constructeur, vous pouvez initialiser les pointeurs à zéro (0)/NULL ou C++11des nullptr) car delete, qu'il soit suivi de [] ou non, est compatible avec un pointeur nul.

Il est nécessaire de définir manuellement un constructeur de copie et un constructeur d'assignation, pour initialiser un objet à l'aide de la copie profonde, comme suit :

Constructeur de copie :

  • Allouer suffisamment d'espace pour stocker les données copiées
  • La copie des données n'est pas simplement une adresse
  • Mettre à jour les membres statiques de la classe affectés
String:String(const String & st)
{
  num_Strings++;
  len = st.len;
  str = new char[len+1];
  std::strcpy(str, st.str);
}

Constructeur d'assignation :

  • Vérifier la situation de copie récursive
  • Libérer les pointeurs membres avant qu'ils ne pointent vers la mémoire
  • La copie des données n'est pas simplement une adresse
  • Retourne une référence à l'objet appelant
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;
}

Voici la totalité du contenu de cet article. J'espère que le contenu de cet article peut vous aider dans vos études ou votre travail, et je vous remercie de soutenir le tutoriel Yelling !

Déclaration : Le contenu de cet article est issu d'Internet, propriété de ses auteurs respectifs, apporté par les utilisateurs d'Internet de manière volontaire et téléversé. Ce site ne détient pas de propriété intellectuelle, n'a pas été édité par l'homme, et n'assume aucune responsabilité juridique. Si vous trouvez du contenu présumé de violation de droits d'auteur, n'hésitez pas à envoyer un e-mail à : notice#oldtoolbag.com (veuillez remplacer # par @ lors de l'envoi d'un e-mail pour signaler une violation, et fournir des preuves pertinentes. Une fois vérifié, ce site supprimera immédiatement le contenu présumé de violation de droits d'auteur.)