Использование Observer_ptr
Что именно является смыслом конструкцииstd::observer_ptr
в библиотеке основы технического задания V2?
Мне кажется, что все, что он делает, это обернутьT*
что кажется лишним шагом, если не добавляет безопасности динамической памяти.
Во всем моем коде я используюstd::unique_ptr
где мне нужно взять явное владение объектом иstd::shared_ptr
где я могу поделиться владением объектом.
Это работает очень хорошо и предотвращает случайное разыменование уже уничтоженного объекта.
std::observer_ptr
Конечно, не дает никаких гарантий относительно срока службы наблюдаемого объекта.
Если бы он был построен изstd::unique_ptr
или жеstd::shared_ptr
Я бы увидел применение в такой структуре, но любой код, который просто используетT*
вероятно, просто будет продолжать делать это, и если они планируют перейти к чему-либо, это было быstd::shared_ptr
и / илиstd::unique_ptr
(в зависимости от использования).
Дан простой пример функции:
template<typename T>
auto func(std::observer_ptr<T> ptr){}
Где было бы полезно, если бы это мешало умным указателям уничтожать их сохраненный объект, пока они наблюдаются.
Но если я хочу наблюдатьstd::shared_ptr
или жеstd::unique_ptr
Я должен написать:
auto main() -> int{
auto uptr = std::make_unique<int>(5);
auto sptr = std::make_shared<int>(6);
func(uptr.get());
func(sptr.get());
}
Что делает это не безопаснее, чем:
template<typename T>
auto func(T *ptr){}
Итак, какая польза от этой новой структуры?
Это только для самодокументируемого источника?