у меня есть std::unique_ptr
и еще один необработанный указатель. Я хочу, чтобы необработанный указатель указывал на содержимое unique_ptr
без какой-либо собственности. Это только для чтения отношения:
auto bar=std::make_unique<foo>();
auto ptr=bar.get();// This may point to another value later
Это плохо? Есть ли альтернатива?
Заметка: реальный пример более сложный. Они не в одном классе.
Если вы можете гарантировать, что A) bar
время жизни будет превышать время жизни ptr
, А ТАКЖЕ B) что ни один программист / рефакторинг никогда не напишет delete ptr;
в любой момент, тогда это прекрасно и, вероятно, идеально подходит для любой ситуации, когда вам нужно передавать указатели без права собственности.
Если эти два условия не могут быть гарантированы, вы, вероятно, должны использовать std::shared_ptr
а также std::weak_ptr
,
Нет, это не плохо, и пока стандартная библиотека не включает предложил std::observer_ptr
, его идиоматический способ выражения несобственного наблюдателя.