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

C++ Convenios a tener en cuenta al usar new en el constructor

Problemas que se encuentran al usar new para inicializar miembros de puntero en un objeto

Al usar new para inicializar miembros de puntero en el constructor, es necesario usar delete en el destructor, y new debe coincidir con delete, new[] debe coincidir con delete[].

在有多个构造函数的情况下,必须以相同的方式使用new,要不用new,要不用new[],因为只存在一个析构函数,所有的构造函数都必须与虚构函数相兼容。

En el caso de tener múltiples constructores, debe usar new de la misma manera, o no usar new, o no usar new[], ya que solo hay un destructor, todos los constructores deben ser compatibles con el destructor./PS. Por supuesto, al inicializar punteros con new en el constructor, puede inicializar los punteros en cero (0)++11NULL o C

Es necesario definir manualmente un constructor de copia y un constructor de asignación, inicializar un objeto a otro objeto con el modo de copia profunda, como se muestra a continuación: (nullptr), ya que delete es compatible con punteros nulos, ya sea con o sin []).

Constructor de copia:

  • Asigna suficiente espacio para almacenar los datos copiados
  • La copia de datos no es solo la dirección
  • Actualiza los miembros estáticos de clase afectados
String:String(const String & st)
{
  num_Strings++;
  len = st.len;
  str = new char[len+1];
  std::strcpy(str, st.str);
}

Constructor de asignación:

  • Verifica la situación de copia a sí mismo
  • Libera la memoria apuntada por los punteros miembros antes de liberarla
  • La copia de datos no es solo la dirección
  • Devuelve una referencia a la instancia de llamada
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;
}

Esto es todo el contenido de este artículo, esperamos que el contenido de este artículo pueda proporcionar cierta ayuda a su aprendizaje o trabajo, y también esperamos que apoyen más a los tutoriales de grito!

Declaración: el contenido de este artículo se obtiene de la red, es propiedad del autor original, el contenido se contribuye y carga de manera autónoma por los usuarios de Internet, este sitio no posee los derechos de propiedad, no se ha procesado editorialmente por humanos y no asume ninguna responsabilidad legal relacionada. Si encuentra contenido sospechoso de infracción de derechos de autor, le invitamos a enviar un correo electrónico a: notice#oldtoolbag.com (al enviar un correo electrónico, reemplace # con @ para denunciar y proporcione evidencia relevante. Una vez verificada, este sitio eliminará inmediatamente el contenido sospechoso de infracción de derechos de autor.)

Te gustará