有效地传递对象?
Passing objects efficiently?
对于我的大部分程序,我一直通过引用传递对象:
MyClass
{
public:
auto DoStuff()->void
{
//Doing stuff...
}
};
MySubClass
{
public:
auto CallFunction(MyClass &MCO)->void
{
MCO.DoStuff();
}
};
int main()
{
MyClass MCO;
MySubClass MSCO;
MSCO.CallFunction(MCO);
}
对于我不需要编辑的对象(只需调用它的函数),通过引用传递是否是内存效率最高的解决方案?
或者,或者使用原始指针?
MyClass
{
public:
auto DoStuff()->void
{
//Doing stuff...
}
};
MySubClass
{
public:
auto CallFunction(MyClass *MCO)->void
{
MCO->DoStuff();
}
};
int main()
{
MyClass *MCO;
MySubClass MSCO;
MSCO.CallFunction(MCO);
delete MCO;
}
如果不需要修改对象,则通过const reference传递。
void CallFunction(const MyClass &MCO)
{
MCO.DoStuff();
}
你通常应该选择基于语义的传递模型,而不是优化。通过 ref 或 const ref 传递对象。按值传递数据,并避免使用指针,除非您的编程模型需要它。在微优化方面,您几乎永远无法比编译器做得更好。
一旦您分析了您的程序并确定了瓶颈,您通常可以通过修改算法或数据存储方式来获得更大的收益。
对于我的大部分程序,我一直通过引用传递对象:
MyClass
{
public:
auto DoStuff()->void
{
//Doing stuff...
}
};
MySubClass
{
public:
auto CallFunction(MyClass &MCO)->void
{
MCO.DoStuff();
}
};
int main()
{
MyClass MCO;
MySubClass MSCO;
MSCO.CallFunction(MCO);
}
对于我不需要编辑的对象(只需调用它的函数),通过引用传递是否是内存效率最高的解决方案?
或者,或者使用原始指针?
MyClass
{
public:
auto DoStuff()->void
{
//Doing stuff...
}
};
MySubClass
{
public:
auto CallFunction(MyClass *MCO)->void
{
MCO->DoStuff();
}
};
int main()
{
MyClass *MCO;
MySubClass MSCO;
MSCO.CallFunction(MCO);
delete MCO;
}
如果不需要修改对象,则通过const reference传递。
void CallFunction(const MyClass &MCO)
{
MCO.DoStuff();
}
你通常应该选择基于语义的传递模型,而不是优化。通过 ref 或 const ref 传递对象。按值传递数据,并避免使用指针,除非您的编程模型需要它。在微优化方面,您几乎永远无法比编译器做得更好。
一旦您分析了您的程序并确定了瓶颈,您通常可以通过修改算法或数据存储方式来获得更大的收益。