ゆとりーなの日記

日記的な事を書いて行くと思はれる

ちょっとした確認に日記を使う人って

class hoge {
 public:
   boost::intrusive_ptr<IDirect3DDevice9> device() const {return device_;}
 private:
   boost::intrusive_ptr<IDirect3DDevice9> device_;
};

というのがあったとき、

void hoge1() {
  const hoge h;
  h.device()->メソッド呼び出し;
  h.device()->メソッド呼び出し;
  h.device()->メソッド呼び出し;
  h.device()->メソッド呼び出し;
}

void hoge2() {
  const hoge h;
  const boost::intrusive_ptr<IDirect3DDevice9> device(h.device());
  device->メソッド呼び出し;
  device->メソッド呼び出し;
  device->メソッド呼び出し;
  device->メソッド呼び出し;
}

ってあったらやっぱりhoge2の方が早い様な気がしないでもないのですが、どうでしょう。
追記:
ちょっと分かりにくい部分があったみたいなのでより詳しく現状を。何をしていたかというとIDirect3DDevice9をスマポで管理するシングルトンクラスを作ったわけです。シングルトンは呼び出しが面倒なので関数でラップしたわけです。そのときシングルトン自体にやりたいメソッドを付けるという方法が最もハンドルを隠蔽した手法であることは承知しているのですが、似たようなメソッドを沢山書くのが無精でシングルトンはIDirect3DDevice9を返してラップした関数で必要なIDirect3DDevice9のメソッドを呼ぶという方式に取り敢えずしたわけです。
hoge1はコピコンが大量に呼ばれてしまうのでやっぱり却下の方向になるわけですが、真昼のtwitter上の議論では、そもそも値返しではなくスマポのconst参照でよいとか、生ポインタ返して問題ない等色々意見をいただきました。非常にありがたい次第です。ハンドルを外部に・・・の部分が気になるところではありますが、今回の場合、IDirect3DDevice9のグローバル変数の代わりにシングルトンを作ったという感じがするのでスマポのconst参照を返すのでいいかなというのが今の心境です。あと、スマポも標準にのまれてunique_ptrで良い気もしてきました。共有とか殆どしてないので・・・。う〜む。