Size: a a a

2020 April 30

AT

Anatoly Tomilov in pro.cxx
Он 1 на TU?
источник
2020 May 01

EP

Egor Pugin in pro.cxx
нет, под каждую статическую
источник

R

Ruben in pro.cxx
подскажите. Часто попадаю в такую ситуацию, когда в деструкторе класса приходится вызывать delete для каких-то динамически созданных объектов. Это вызывает проблемы, когда при создании/разрушении временного объекта и его передаче куда-то, вызываеся деструктор и в итоге в другой объект копируются уже мертвые указатели. Как это решать?
источник

ПК

Побитый Кирпич... in pro.cxx
Mikhail Matrosov
но имей в виду, что память должна выделяться и освобождаться не пересекая границу подключения либы
Со статической либой пофиг
источник

AT

Anatoly Tomilov in pro.cxx
Ruben
подскажите. Часто попадаю в такую ситуацию, когда в деструкторе класса приходится вызывать delete для каких-то динамически созданных объектов. Это вызывает проблемы, когда при создании/разрушении временного объекта и его передаче куда-то, вызываеся деструктор и в итоге в другой объект копируются уже мертвые указатели. Как это решать?
Определи правильно copy constructor и assignment operator. Этого достаточно
источник

MM

Mikhail Matrosov in pro.cxx
Побитый Кирпич
Со статической либой пофиг
с чего бы? плюсам всё равно нужен будет плюсовый рантайм.
источник

EP

Egor Pugin in pro.cxx
Ruben
подскажите. Часто попадаю в такую ситуацию, когда в деструкторе класса приходится вызывать delete для каких-то динамически созданных объектов. Это вызывает проблемы, когда при создании/разрушении временного объекта и его передаче куда-то, вызываеся деструктор и в итоге в другой объект копируются уже мертвые указатели. Как это решать?
надо продумать владение, кто кем владеет, владелец должен уничтожать объект
источник

MM

Mikhail Matrosov in pro.cxx
Ruben
подскажите. Часто попадаю в такую ситуацию, когда в деструкторе класса приходится вызывать delete для каких-то динамически созданных объектов. Это вызывает проблемы, когда при создании/разрушении временного объекта и его передаче куда-то, вызываеся деструктор и в итоге в другой объект копируются уже мертвые указатели. Как это решать?
не надо вызывать delete :)
источник

R

Ruben in pro.cxx
владелец определен думаю правильно, просто например при добавлении объекта в вектор (push_back) создает новый объект, а временный потом разрушается
источник

AT

Anatoly Tomilov in pro.cxx
Anatoly Tomilov
Определи правильно copy constructor и assignment operator. Этого достаточно
А чтобы ещё лучше было, move constructor и assignment operator. А лучше вместо delete используй unique_ptr
источник

R

Ruben in pro.cxx
Mikhail Matrosov
не надо вызывать delete :)
но класс должен удалять объекты, которыми он владеет
источник

R

Ruben in pro.cxx
и при этом безопасно копироваться по значению
источник

MM

Mikhail Matrosov in pro.cxx
Ruben
но класс должен удалять объекты, которыми он владеет
ну да. храни по значению или в умных указателях
источник

AT

Anatoly Tomilov in pro.cxx
Ruben
и при этом безопасно копироваться по значению
Так ты deep copy делаешь?
источник

EP

Egor Pugin in pro.cxx
Ruben
и при этом безопасно копироваться по значению
копируется указатель, а не указываемые данные
источник

MM

Mikhail Matrosov in pro.cxx
Ruben
и при этом безопасно копироваться по значению
точно нужно копирование? если достаточно перемещения, то и проблем вообще не будет
источник

MM

Mikhail Matrosov in pro.cxx
не надо в современном с++ никогда писать delete
источник

R

Ruben in pro.cxx
Egor Pugin
копируется указатель, а не указываемые данные
это я понял, вопрос как избежать
источник

EP

Egor Pugin in pro.cxx
Ruben
это я понял, вопрос как избежать
когда в объекте есть указатель, то надо свой конструктор копирования писать вместо кастомного, и уже в нём нужное поведение записывать
источник

MM

Mikhail Matrosov in pro.cxx
Ruben
это я понял, вопрос как избежать
простой ответ: unique_ptr
источник