Здравствуйте, 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 это аргумент конструктора, а значит нечего переставлять. Откуда там может быть утечка?!