Использование 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){}

Итак, какая польза от этой новой структуры?

Это только для самодокументируемого источника?

Ответы на вопрос(0)

Ваш ответ на вопрос