Указатель на содержимое 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

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

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

14

Решение

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

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

25

Другие решения

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

26

По вопросам рекламы [email protected]