Здравствуйте, Cyberax, Вы писали:
C>Нельзя. Кстати, сам на это нарывался — без активной подписки недоступен сайт загрузки.
Хм, странно. Ну тогда надо заранее скачивать )
C>Попробуй дать подписке истечь.
Не могу — у меня их две штуки активных, и самая последняя до конца 2018 года — причём ни за одну из них я не платил ни копейки
Здравствуйте, pkl, Вы писали:
pkl>Был на собеседе примерно год назад.
pkl>чтобы было можно. Отчего возникает pure virtual call. Был вопрос: "почему в этом коде течёт память: std::shared_ptr<T> t(new T( f() ) );" f() -- память не выделяет, возвращает int, может кидануть эксцепшн.
Добрый день/вечер!
Может быть уже поздно, но всеже...
Наткнулся на этот пост — решил поисследовать вопрос.
Мне кажется Вы неправильно запомнили что собесед спрашивал.
Есть там проблема в плюсах с точками следования + исключения — тут да — возможна утечка памяти в принципе
Скорее всего кусок проблемного кода выглядел по типу:
1).
someFunction(std::shared_ptr<Foo>(new Foo), getRandomKey()); (отсюда
http://archive.kalnytskyi.com/2011/11/02/smart-pointers-in-cpp11/)
2).
или та же проблема только без shared_ptr:
f( new X(i++), new Y(i) ); (отсюда
http://cpp-reference.ru/articles/sequence-points-and-expression-evaluation/)
тема в том что C++ не гарантирует порядок вычисления аргументов функции и более того как оказывается (только сегодня благодяря Вашему посту раскопал) вполне допускает для первого случая вычисление в след порядке:
1. new Foo (запомнили сырой успешно созданный указатель во временной переменной)
2. getRandomKey()
3. std::shared_ptr<Foo>( сырой успешно созданный указатель во временной переменной )
Если на 2. м шаге исключение в (getRandomKey()) — то память с 1. го шага утечет
И я подозреваю, что этот вопрос являлся следствием предыдущего: чем make_shared лучше new shared_ptr<Foo>(new Foo)
Сколько C++ не используй — постоянно открываешь что то новое
--
Regards
Здравствуйте, Cyberax, Вы писали:
C>Мне это напоминает одного нищеброда тут, который кричал, что ненавидит компанию из-за того, что ему не дали студенческую скидку без документов студента (он не студент).
А это где?
Здравствуйте, Андруха, Вы писали:
А>Здравствуйте, pkl, Вы писали:
pkl>>Был на собеседе примерно год назад.
pkl>>чтобы было можно. Отчего возникает pure virtual call. Был вопрос: "почему в этом коде течёт память: std::shared_ptr<T> t(new T( f() ) );" f() -- память не выделяет, возвращает int, может кидануть эксцепшн.
А>1).
А>someFunction(std::shared_ptr<Foo>(new Foo), getRandomKey()); (отсюда http://archive.kalnytskyi.com/2011/11/02/smart-pointers-in-cpp11/)
А>2).
А>или та же проблема только без shared_ptr:
А>f( new X(i++), new Y(i) ); (отсюда http://cpp-reference.ru/articles/sequence-points-and-expression-evaluation/)
Нет, точно не было второго аргумента.