4

そのようなコードに遭遇しました。

MyClass MyClass::get_information (const some_datastructure *record)
{
    auto_ptr<MyClass > variable (new MyClass ());

    variable ->set_article_id(record->article_id);

    return *variable.get();
}

これが MyClass 型のオブジェクトの (コピー?) を返すことは理解しています。最初は、auto_ptr オブジェクトがスコープ外に出ると破棄されると思っていたので、意味をなさない (?) auto_ptr オブジェクトを返していると思っていました。

とにかく、上記のコードは大丈夫ですか?*variable.get()関数が戻ったとき/後にオブジェクトは存在しますか?

4

2 に答える 2

4

値で返されるので、はい、オブジェクトは問題ありませんが、問題に対するポインターまたはヒープ割り当ての使用を理解していません...通常の変数を使用すると簡単になります。

MyClass var;
var.set_article_id(record->article_id);
return var;
于 2013-06-13T14:57:34.383 に答える
3

はい、そうです

実際には、ポインターの基になるオブジェクトの一時的な右辺値、実際にはコピーを作成します。戻り値の型がMyClass*butではないことに注意してくださいMyClass。そのため、コピーが返されます。*variable.get()また、右辺値を生成します。

于 2013-06-13T14:57:09.053 に答える