BobInNJ Ответов: 1

Безопасно ли это в C++?


Если у меня есть класс, который выглядит примерно так:
class Student {
public:
   // not shown
private:
  string lastName;
  string firstName;
}

Безопасно ли определить два экземпляра Student и назначить их, даже если у меня нет определенного оператора присваивания? Я думаю, что это не потому, что я собираюсь получить неглубокую копию строк, которая вызовет проблемы при вызове деструктора для строковых объектов. Я прав насчет этого?

Боб

Что я уже пробовал:

Я устал от него, и он работал с помощью компилятора gnu C++.

1 Ответов

Рейтинг:
8

Jochen Arndt

Для вашего класса будет неявно объявлен оператор присваивания копии. Потому что он содержит нетривиальные члены (std::string), который будет выполнять назначение копирования по элементам (вызовите назначение копирования для каждого элемента строки). Смотреть также Оператор назначения копирования - cppreference.com[^].

Было бы небезопасно, если бы ваш класс имел член, указывающий на выделенную память, или члены, которые являются классами, имеющими таковую, и не имеют оператора присваивания копии.

Но std::string имеет оператор назначения копии, и поэтому он безопасен.


CPallini

5.