我遇到过这样的代码。
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()
?
答案 0 :(得分:4)
因为它是按值返回的,是的,对象很好,虽然我不明白指针或堆分配的使用... 使用常规变量会更简单:
MyClass var;
var.set_article_id(record->article_id);
return var;
答案 1 :(得分:3)
是的,
实际上它会创建指针底层对象的临时右值,实际上是一个副本。请注意,返回类型不是MyClass*
,而是MyClass
。这就是为什么要复制一份副本。 *variable.get()
也产生右值。