为方法提供一个空实例是一种好习惯吗?

Rem*_*i.b 4 c++ methods performance class

C++新手在这里!有一个类Individual分配了很多记忆,所以我们想避免复制.设motherfather是两个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)

人们也可以使用外部功能,但我看不出可能代表什么优势.

Lig*_*ica 6

会员功能reproduce应该归还宝宝.

这是没有意义的有一个孩子事先多数民众赞成仅仅再现的行为改变 - 这将是更接近你的父母找到门前的台阶上宝宝,已经由一个鹳沉积,那么宝宝成型为他们的家庭; 希望你现在知道这不是它的工作原理!

不要担心性能; 如果你的Individual类有一个移动构造函数(或遵循零规则),那么这是一个完整的非问题.即使不是,返回值优化也应该处理好事情.

您尝试返回对局部变量的引用具有未定义的行为,因为您正确地直觉.所以不要这样做.