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

Внимание при использовании new в конструкторе C++

Проблемы, возникающие при использовании new для инициализации членских указателей объекта

В конструкторе используется new для инициализации членских указателей, тогда в деструкторе необходимо использовать delete, и new соответствует delete, new[] соответствует delete[].

При наличии нескольких конструкторов, они должны использовать new одним и тем же образом, или не использовать new, или не использовать new[], так как существует только один деструктор, все конструкторы должны быть совместимы с деструктором.

PS.もちろん, при инициализации указателя с помощью new в конструкторе, указатель можно инициализировать как пустой (0/NULL или nullptr в C++11), так как delete, независимо от наличия [], совместим с пустым указателем.

Необходимо определить копирующий конструктор и конструктор назначения, чтобы с помощью глубокого копирования инициализировать один объект для другого, один объект копируется в другой объект, как показано ниже:

Конструктор копирования:

  • Ассигновайте достаточное пространство для хранения копируемых данных
  • Копирование данных не только адрес
  • Обновите受到影响 статические член класса
String:String(const String & st)
{
  num_Strings++;
  len = st.len;
  str = new char[len+1];
  std::strcpy(str, st.str);
}

Конструктор назначения:

  • Проверьте ситуацию самокопирования
  • Освободите член указателя перед тем, как он указывает на память
  • Копирование данных не только адрес
  • возврат ссылки на вызываемый объект
String & String:operator=(const String & st)
{
  if(this == &st)
    возврат *this;
  else
    delete [] str;
    len = st.len;
    str = new char[len+1];
    std::strcpy(str, st.str);
  возврат *this;
}

Вот и все, что есть в этой статье, я надеюсь, что содержание статьи поможет вам в изучении или работе, и я также надеюсь, что вы будете активно поддерживать учебник!

Заявление: содержание этой статьи взято из Интернета, авторские права принадлежат соответствующему автору. Контент предоставлен пользователями Интернета, загружен самостоятельно, сайт не имеет права собственности, не прошел редактирование, не несет ответственности за соответствующие юридические вопросы. Если вы обнаружите спорное содержание, пожалуйста, отправьте письмо по адресу: notice#oldtoolbag.com (при отправке письма замените # на @), и предоставьте соответствующие доказательства. Если факт будет подтвержден, сайт немедленно удалят спорное содержание.

Рекомендуем также