Re: Почему в этом коде течет память
От: · Великобритания  
Дата: 08.06.17 12:18
Оценка:
Здравствуйте, techgl, Вы писали:

pkl>>4) Вопросы были такие: зачем std::make_shared, если можно без него. Чем shared_ptr от weak_ptr отличается. Что-то там про исключения, типа можно ли кидать одно не перехватив ещё другое и если нет, то как сделать чтобы было можно. Отчего возникает pure virtual call. Был вопрос: "почему в этом коде течёт память: std::shared_ptr<T> t(new T( f() ) );" f() -- память не выделяет, возвращает int, может кидануть эксцепшн. Видимо она там никак не течёт, вопрос был психотронный — как я ему докажу обратное.

T>Например, почитать книгу Effective Modern C++ и Item 21 в ней. Тогда не надо будет ничего доказывать.
В Item 21 код несколько другой:
processWidget(std::shared_ptr<T>(new T), f());

Тут выражение с new никак от вызова f не зависит и поэтому компилятору можно переставлять. А в примере pkl это аргумент конструктора, а значит нечего переставлять. Откуда там может быть утечка?!
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.