Я бы не стал считать это хорошей практикой. Указатели являются основным приоритетом разработки на C / C ++, и, б / у, кодеры C / C ++ удобны в использовании синтаксиса де-ссылки, необходимого указателям. Я стараюсь избегать использования указателей, когда это возможно (хотя и не по синтаксическим причинам), но иногда это просто лучший инструмент для работы. Если у вас есть код, который является грубым b / c, вы используете указатель, я бы, как правило, удалил его из ссылки в функцию, которая передает объект по ссылке, которая, по сути, делает то, что вы делаете, но, по моему мнению, это делает более элегантный способ. Так что вместо:
shared_ptr<std::vector<int> > sp = get_sp_to_vector();
std::vector<int>& vec = *sp;
...ugly stuff...
vec.push_back(5);
Я бы сделал:
void func(std::vector<int> &vec)
{
... previously ugly stuff...
vec.push_back(5);
}
shared_ptr<std::vector<int> > sp = get_sp_to_vector();
func(*sp);
EDIT:
Это не означает, что вы должны создать функцию просто для создания более приятного синтаксиса для указателей, поскольку это означает, что если вам не нравится синтаксис указателя и ваш код использует чистые и лаконичные функции, вы можете просто заставить функции принимать ссылки и разыменование вашего указателя при вызове функции. Для ситуаций, когда у вас есть только несколько вызовов * p или p-> x, кажется глупым создавать функцию со ссылкой или создавать ссылку для вызова p.x. Просто используйте синтаксис указателя в этих случаях, так как это синтаксис C / C ++.
Другие используют ссылки внутри циклов, где указатель может нуждаться в многократной ссылке. Я согласен, что в этих случаях было бы полезно получить ссылку.