Я просто понял, прочитав эту страницу, что конструктор std:: shared_ptr с одним аргументом указателя не является исключением.
Следовательно, следующий код содержит возможную утечку памяти:
std::shared_ptr<int> p3 (new int);
Предполагается, что могут быть два распределения:
- Первая перед вызовом конструктора
- Второй в конструкторе shared_ptr (Это то, что происходит в VS 2012, например)
Два вопроса здесь:
Верно ли, что если второе выделение генерирует исключение, то происходит утечка памяти первого?
Если да, то:
Какая правильная идиома для использования std:: shared_ptr?
- Использование make_shared
- дающий право собственности на первое выделение на std:: unique_ptr, а затем передачу права собственности
- Другие мысли?