1

私はこのような機能を持っています:

unique_ptr<int> foo() {
    return unique_ptr<int>(new int[4])
}

この foo() を呼び出すとき、私は次のことを行います。

unique_ptr<int> t = foo()

このコードに何か問題があるのだろうか?直接割り当てる代わりに std::move のようなものを使用する必要がありますか? 次のように、参照によって一意のptrを返すことはできますか?

unique_ptr<int>& foo() {
    return unique_ptr<int>(new int[4])
}
4

1 に答える 1

3

RVO が発生しない場合は、移動コンストラクターが自動的に使用されるため、問題ありません。ぶら下がりますので、参照を返すことは絶対に避けてください。ただし、ここでは割り当ては行われていないことに注意してください。Benjamin が指摘しているように、省略記号を埋めたので、std::unique_ptr<int[]>そのようなメモリを割り当てるために を使用する必要があります。

于 2013-05-23T00:55:35.733 に答える