在函数中返回auto_ptr的值

时间:2013-06-13 14:53:49

标签: c++

我遇到过这样的代码。

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()

2 个答案:

答案 0 :(得分:4)

因为它是按值返回的,是的,对象很好,虽然我不明白指针或堆分配的使用... 使用常规变量会更简单:

MyClass var;
var.set_article_id(record->article_id);
return var;

答案 1 :(得分:3)

是的,

实际上它会创建指针底层对象的临时右值,实际上是一个副本。请注意,返回类型不是MyClass*,而是MyClass。这就是为什么要复制一份副本。 *variable.get()也产生右值。