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

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

2013-10-11 |

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

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class CA
 
{
 
};
 
class CB : public CA
 
{
 
};
 
 
 
void func(CA src);
 
 
 
int main()
 
{
 
CA* p1 = new CB;
 
func(*p1);
 
....
 
}

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

分类:

编码技巧

| 标签: