Время жизни объектов в с ++

Если метод equals() присутствует в классе java.lang.Object, и ожидается, что он проверяет эквивалентность состояния объектов! Это означает, что содержимое объектов. В то время как ожидается, что оператор == проверяет, что фактические экземпляры объекта одинаковы или нет.

Пример

Рассмотрим две различные ссылочные переменные, str1 и str2:

str1 = new String("abc");
str2 = new String("abc");

Если вы используете equals()

System.out.println((str1.equals(str2))?"TRUE":"FALSE");

, вы получите выход как TRUE, если вы используете ==.

System.out.println((str1==str2) ? "TRUE" : "FALSE");

Теперь вы получите вывод FALSE в качестве вывода, потому что оба str1 и str2 указывают на два разных объекта, хотя оба они имеют одинаковое строковое содержимое. Именно из-за new String() каждый новый объект создается каждый раз.

-2
задан bruno 10 March 2019 в 17:29
поделиться

2 ответа

Это тривиальный вопрос

Может ли кто-нибудь объяснить причину трех деструкторов?

при вызове

[110 ]

вызывается ваша функция, которая создает объект типа Entity, который в свою очередь вызывает конструктор. Здесь вы получите одно дополнительное сообщение конструктора

Замените ваш Entity(int t) contructor by this

 Entity(int t)
   :a(t)
  {
    std::cout << "Constructor created with integer "<< a << std::endl;
  }

Вы увидите, какие конструкторы были вызваны при запуске кода.

0
ответ дан Roushan Singh 10 March 2019 в 17:29
поделиться

Ваше "Скопировано!" строка в выводе исходит от конструктора копирования, поэтому вы создаете три объекта, а не два (тогда вы уничтожаете все три, как и ожидалось).

Обратите внимание, что конструктор копирования должен обычно принимать свой аргумент по ссылке const. Возможно, вы используете компилятор Microsoft C ++, который привязывает временную ссылку к неконстантной ссылке.

Также обратите внимание, что если вы включите оптимизацию, вы, вероятно, можете ожидать увидеть только два конструктора и два деструктора без создания копии. С достаточно новым (C ++ 17) компилятором это должно произойти, даже если вы не включаете оптимизацию (удаление из копии стало обязательным).

0
ответ дан Jerry Coffin 10 March 2019 в 17:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: