在此对象创建期间发生了哪些复制/分配操作?

时间:2012-12-17 06:04:49

标签: c++ constructor copy return-value

class myObj
{
   myObj() {};
}

myObj MakeObj()
{
    return( myObj() );
}

main()
{
   myObj o = MakeObj();
}

在MakeObj函数中,obj由value返回。因此,在赋值中,将复制创建的对象。似乎有两个操作 - 一个用于创建对象并在MakeObj中分配其字段,另一个用于在返回时复制对象。

编译器是否优化了其中一个步骤?
创建复杂对象并分配它的最快方法是什么?

1 个答案:

答案 0 :(得分:2)

从语义上讲,在C ++ 03中,代码中有两个副本,即从MakeObj()返回时,但第一个副本通常会被编译器优化掉。该优化称为Return Value Optimization

在C ++ 11中,返回的对象实际上是移动(如果可用且可访问),而不是复制,这是由编译器优化的。