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 回答