Указывает на содержание std:: unique_ptr

У меня есть std::unique_ptr и еще один необработанный указатель. Я хочу, чтобы необработанный указатель указывал на содержимое unique_ptr без какого-либо права собственности. Это отношение только для чтения:

auto bar=std::make_unique<foo>();
auto ptr=bar.get();// This may point to another value later

Это плохо? Есть ли альтернатива?

Примечание: реальный пример более сложный. Они не в одном классе.

Ответы

Ответ 1

Если вы можете гарантировать, что срок службы A) bar превысит время жизни ptr, AND B), что ни один программист/рефакторинг никогда не напишет delete ptr; в любой момент, то это совершенно прекрасно и, вероятно, идеально подходит для любой ситуации, когда вам нужно передать указатели без права собственности.

Если эти два условия не могут быть гарантированы, вероятно, вы должны использовать std::shared_ptr и std::weak_ptr.

Ответ 2

Нет, это неплохо, и пока стандартная библиотека не включит предложенный std::observer_ptr, это идиоматический способ выражения не владеющего наблюдателем.