3

1)

template<typename T, typename Arg> 
  shared_ptr<T> factory(Arg arg)
  { 
    return shared_ptr<T>(new T(arg));
  } 

2)

template<typename T, typename Arg> 
  shared_ptr<T> factory(Arg& arg)
  { 
    return shared_ptr<T>(new T(arg));
  } 

3)

template<typename T, typename Arg> 
  shared_ptr<T> factory(Arg const & arg)
  { 
    return shared_ptr<T>(new T(arg));
  } 

*) なぜ 1 番と 2 番よりも 3 番が好まれるのですか?

*) factory(41) が呼び出された場合、右辺値で呼び出されるのはなぜですか?

*)# BOOST_ASIO_MOVE_ARG(type) type&& を定義します。この場合の && は何ですか?

4

2 に答える 2

1

*) なぜ 1 番と 2 番よりも 3 番が好まれるのですか?

(1)Argコピーできない場合は機能しません。(2) 次のように、右辺値を渡すことはできません。factory<int>(42);

3 つの例のいずれにも、完全な転送が含まれていないことに注意してください。ご質問の件名が何を指しているのかわかりません。

*) factory(41) が呼び出された場合、右辺値で呼び出されるのはなぜですか?

質問を理解しているかどうかわかりません。41定義による右辺値です。

*)# BOOST_ASIO_MOVE_ARG(type) type&& を定義します。この場合の && は何ですか?

type&&への右辺値参照ですtype

于 2013-08-31T02:12:05.070 に答える