class Hoge { };
class Fuga {
private:
 Hoge *pHoge;
public:
 void change1(Hoge **p) {
  Hoge *tmp=pHoge;
  pHoge=*p;
  *p=tmp;
 }
 Hage *change2(Hoge *p) {
  Hoge *tmp=pHoge;
  pHoge=p;
  return tmp;
 }
};

main() {
 Hoge *hoge;
 change1(&hoge);
 hoge=change2(hoge);
}

---
コンストラクタ、デストラクタは省略。
change1とchange2の実装だったらどっちが良い?