All streams
Search
Write a publication
Pull to refresh
-3
0
Максим @MGNeo

C++11, Нейронные сети, Алгоритмы, Многопоточность

Send message
Еще раз повторяю — я не ваш студент. Простых и правильных способов нет по простой причине — задачи, цели и ситуации бывают разные. Навязывать свое мнение другому человеку, когда вас об этом не просят — плохая привычка.
Да, я знаю реальные примеры, когда такое поведение приводит к проблемам.К сожалению — я не могу выложить код, так как в нем 4 миллиона строк и это военная тайна, без шуток.

В общих чертах проблемы возникают в ситуациях, вроде:
A a_val { a2 (f(x) + f(y) a1) — a3a4};
И эта проблема появляется именно из-за пропуска конструктора копирования/перемещения, тк при создании локального объекта происходит обращение к ядру распределенной системы.
И, к счастью или несчастью, я не ваш студент. Поэтому не стоит меня учить, что применять и как настраивать мои проекты.
Деструкторы объектов m2 и m3 вызываются уже при выходе из main(). А вот что действительно вызывает вопрос: почему в вашем выводе не присутствует вывода из этих деструкторов. Корректный результат, который получаю я, должен выглядеть так:

Деструкторы вызываются при выходе из программы. У меня выхода из программы нет, возможно вы не заметили Sleep(-1).
Если вы получаете результат, это не значит, что он корректный.
Я не забыл вернуть значение. &operator= описан для галочки, чтобы увидеть, вызывается ли он вообще, пусть и сам для себя. Возможно вы не заметили, что он не вызывается.
Вообще-то в этом случае есть copy elision.
Мое приложение не создавалось для прохождения тестов. И у меня не линукс.
Понятия не имею, что происходит на g++, clang++ и так далее. В статье ясно написано, что тесты проводились на VS 2013.
kirilodius, ведь это флаг для GCC? Не могу найти аналог для VS 2013.
Деструкторы объектов m2 и m3 вызываются уже при выходе из main().

Вызов деструкторов m2 и m3 не имеет ни малейшего отношения к рассматриваемой ситуации. В моем примере вызов деструкторов этих объектов не происходит по той простой причине, что программа "навечно" засыпает при вызове Sleep(-1);
Не забыл, а упустил из вида при написании статьи в 2 часа ночи. Листинг тестируемой программы содержит:

if (this != &obj)
{...}
return *this;

Но дело совсем не в этом недочете листинга. Сам оператор присваивания и не вызывается в программе. Зачаточная версия &operator= присутствует в упрощенном виде, чтобы показать, что оператор = вообще не вызывается. Исправил.
Верно, забыл обновить код в процессе тестирования. У меня в программе написано

if (this != &obj)
{

}
return *this;

Исправлю, как приду с работы.

Information

Rating
Does not participate
Location
Сызрань, Самарская обл., Россия
Date of birth
Registered
Activity