Rem*_*i.b 4 c++ methods performance class
C++新手在这里!有一个类Individual
分配了很多记忆,所以我们想避免复制.设mother
和father
是两个Individual
秒.我希望他们用这个方法重现reproduce
另一个Individual
叫做的方法baby
.
直观地说,我将baby
使用默认构造函数初始化,将其传递给参数reproduce
并返回引用(尽管我认为没有必要返回引用).这是一个代码
class Individual
{
public:
void reproduce (const Individual& father, Individual& baby)
{
// Set all attributes of baby
}
private:
// Plenty of variables
}
int main()
{
// Do Stuff
Individual mother(arg1,arg2,arg3);
Individual father(arg1,arg2,arg3);
// Do stuff
Individual baby;
mother.reproduce(father,baby);
}
Run Code Online (Sandbox Code Playgroud)
这被认为是好习惯吗?
另一种方法是baby
直接在方法中初始化reproduce
并返回一个引用,但我会预测它baby
会在调用结束时被销毁reproduce
.
class Individual
{
public:
Individual& reproduce (const Individual& father)
{
Individual baby;
// Set all attributes of baby
return baby
}
private:
// Plenty of variables
}
int main()
{
// Do Stuff
Individual mother(arg1,arg2,arg3);
Individual father(arg1,arg2,arg3);
// Do stuff
auto baby = mother.reproduce(father);
}
Run Code Online (Sandbox Code Playgroud)
人们也可以使用外部功能,但我看不出可能代表什么优势.
会员功能reproduce
应该归还宝宝.
这是没有意义的有一个孩子事先多数民众赞成仅仅再现的行为改变 - 这将是更接近你的父母找到门前的台阶上宝宝,已经由一个鹳沉积,那么宝宝成型为他们的家庭; 希望你现在知道这不是它的工作原理!
不要担心性能; 如果你的Individual
类有一个移动构造函数(或遵循零规则),那么这是一个完整的非问题.即使不是,返回值优化也应该处理好事情.
您尝试返回对局部变量的引用具有未定义的行为,因为您正确地直觉.所以不要这样做.