Я не считаю, что это хорошая практика. Указатели являются основным местом разработки C/C++ и b/c этого, кодеки C/C++ удобны с синтаксисом de-reference, необходимым для указателей. Я стараюсь избегать использования указателей, когда это возможно (не для синтаксических соображений), но иногда это просто лучший инструмент для работы. Если у вас есть код, который является gnarly 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++.
Другие придумывали ссылки в циклах, где указатель может быть удален по ссылке многократно. Я согласен с тем, что в этих случаях ссылка была бы полезной.
Я тоже это делаю. Мне кажется довольно разумным, когда у меня есть какой-то указатель, но с чем я действительно хочу работать, это то, на что он указывает. Чтобы избежать конфликтов имен между различными типами переменных, относящихся к одному и тому же значению в одной и той же области, я использую имена типа «foo» для ссылочного или фактического объекта «p_foo» для указателя «ap_foo» для 'std :: auto_ptr 'и" sp_foo "для' boost :: shared_ptr' или 'std :: tr1 :: shared_ptr'. – Wyzard
Кажется, что в последнее время наблюдается тенденция отвечать на вопросы в комментариях ... куча анютины глазки. Человек вверх. Я бы проголосовал за этот комментарий, если это было возможно - не потому, что я думаю, что ответ плох, но потому что это ответ, следовательно, не * комментарий *. – paxos1977
@ceretullis: Нет, в моем комментарии не рассматривается вопрос о том, есть ли у него какие-то недостатки. Вот почему я решил написать комментарий вместо ответа. – Wyzard