Этот код не компилируется:
std::shared_ptr
Вместо этого, так как конструктор shared_ptr объявлен explicit - приходится писать:
std::shared_ptr
Я нахожу это как минимум неудобным.
В чём причины такого дизайна ?
И какой от этого профит ?
Ответ
Допустим у нас есть функция, принимающая умный указатель:
void foo(std::shared_ptr
Тогда такой код приведет к удалению ресурса, хотя мы этого не подразумевали:
MyType *object = new MyType();
foo(object);
При вызове функции выполнится создание умного указателя, а при выходе из неё он удалит тот объект которым владел. И все это скомпилируется без каких либо предупреждений.
Комментариев нет:
Отправить комментарий