您当前位置: 首页 » 编码技巧 » 不给函数做对象的值传递另一个重要原因

不给函数做对象的值传递另一个重要原因

2013-10-11 |

在调用函数时,一般都不建议采用值传递,原因是因为要建立一个临时的拷贝;这样会带来空间和时间复杂度的提升。

一般除非很特殊情况,很少把对象以值的方式进行传递到函数里面。

实际上,不讲对象做值传递还有一个比较重要的原因。

在C++的多态中,如果父类的指针指向了一个子类对象,并对该对象做值传递,会导致子类数据丢失。大致代码如下:


class CA

{

};

class CB : public CA

{

};

 

void func(CA src);

 

int main()

{

CA* p1 = new CB;

func(*p1);

....

}

在这个代码里,实际上调用func时,使用了CA的默认拷贝构造函数,因为对于CB的所有数据就丢失了,在func里面的临时对象也仅仅是CA类型。

分类:

编码技巧

| 标签: