类的对象作为函数形参
bool fini_stream_handler(stream_event_fact* fact)
我的代码里有很多这样的函数,以对象指针作为函数形参。对象的传递方式有值传递和地址传递两种(地址传递包括指针传递和引用传递)
值传递
bool fini_stream_handler(stream_event_fact fact)
值传递不会改变实参的数据。
对象指针作函数的参数
bool fini_stream_handler(stream_event_fact* fact)
使用对象指针作为函数参数要经使用对象作函数参数更普遍一些。因为使用对象指针作函数参数有如下两点好处:
(1) 实现传址调用。可在被调用函数中改变调用函数的参数对象的值,实现函数之间的信息传递。
(2) 使用对象指针实参仅将对象的地址值传给形参,而不进行副本的拷贝,这样可以提高运行效率,减少时空开销。
当形参是指向对象指针时,调用函数的对应实参应该是某个对象的地址值,一般使用&后加对象名。下面举一例子说明对象指针作函数参数。
对象引用作函数参数
bool fini_stream_handler(stream_event_fact & fact)
在实际中,使用对象引用作函数参数要比使用对象指针作函数更普遍,这是因为使用对象引用作函数参数具有用对象指针作函数参数的优点,而用对象引用作函数参数将更简单,更直接。所以,在C++编程中,人们喜欢用对象引用作函数参数。
而在C++中有三种情况需要调用复制构造函数。
1) 一个对象作为函数参数,以值传递的方式传入函数体
2) 一个对象作为函数返回值,以值传递的方式从函数返回
3) 一个对象用于给另外一个对象进行初始化(常称为复制初始化)
因此值传递时调用复制构造函数,地址传递时不调用复制构造函数。
参考博客