1、不要用函数的行参,行参是用来向函数里 传递参数的。
如
class obj
{
obj(){}
obj(const obj& obj)
{
std::cout<<"copy constructor function runtime...'<<std::endl;
}
};
class objs
{
objs(obj m_obj = obj())
{
this->one_obj = m_obj;
}
void GetObj(obj& m_obj)
{
m_obj = this->one_obj; //通过行参取得数据成员,构造函数运行
}
obj& GetObj()
{
retrun this->one_obj; //通过返回值取得数据成员,构造函数不运行
}
void GetObj(obj* obj_ptr)
{
obj_ptr = &this->one_obj;//通过指针取得数据成员,构造函数不运行
}
void GetObj1(obj* obj_ptr)
{
*obj_ptr = this->one_obj; //通过指针取得函数成员,构造函数不运行
}
private:
obj one_obj;
}
int main()
{
objs m_objs;
obj m_obj;
obj* m_obj_ptr;
m_objs.GetObj(m_obj); //可以取得数据成员,但是会触发拷贝构造函数。
obj& m_obj = m_objs.GetObj();//可以取得数据成员,且不会触发拷贝构造函数,效率高,根据是否对数据成员修改,返回值加const修饰。
GetObj(m_obj_ptr); //不能取得数据成员,原因是指针是进行的值传递,指针已经被复制。
GetObj1(m_obj_ptr); //可以取得数据成员,因为虽然指针被复制,但复制后指针同原指针指向同一个地址。
return 0;
}