在调用函数时,一般都不建议采用值传递,原因是因为要建立一个临时的拷贝;这样会带来空间和时间复杂度的提升。
一般除非很特殊情况,很少把对象以值的方式进行传递到函数里面。
实际上,不讲对象做值传递还有一个比较重要的原因。
在C++的多态中,如果父类的指针指向了一个子类对象,并对该对象做值传递,会导致子类数据丢失。大致代码如下:
class CA { }; class CB : public CA { }; void func(CA src); int main() { CA* p1 = new CB; func(*p1); .... }
在这个代码里,实际上调用func时,使用了CA的默认拷贝构造函数,因为对于CB的所有数据就丢失了,在func里面的临时对象也仅仅是CA类型。