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;
}
本文探讨了C++中不同方式访问类的数据成员,包括通过引用传递、返回引用和使用指针等方法,并分析了这些方法如何影响拷贝构造函数的调用。此外,还介绍了在获取数据成员时效率更高且避免不必要的拷贝构造函数调用的方法。
1321

被折叠的 条评论
为什么被折叠?



