typedef boost::shared_ptr<Hoge> HogePtr;
typedef std::vector<MoejpResPtr> HogePtrArray;

class HogeManager
{
private:
 HogePtrArray hoges_;
public:
 void Foo()
 {
  //処理色々
 }
 ・
 ・


 <A>
 void Add(HogePtr hoge)
 {
  hoges_.push_back(hoge);
 }

 <B>
 void Add(const HogePtr &hoge)
 {
  hoges_.push_back(hoge);
 }
};

上記のような状況の時hoges_に要素を追加するメソッドを作りたい時
<A>と<B>どちらがより良い方法ですか?
AでもBでも参照カウントが壊れる事はないですか?