c ++:何时传递指针而不是返回对象

时间:2017-08-02 18:18:35

标签: c++ pointers

我刚刚开始使用c ++,我想知道是否有关于何时执行以下操作的指南:

假设我想返回一个结构或对象。在什么情况下哪种方法会更好?

|

OR:

void PopulateStruct(MyStruct* struct) {
      struct->a = x;
      struct->b = y;
}

void Caller() {
    MyStruct s;
    PopulateStruct(&s);
}

我的基本理解是,如果struct / object非常小,那么后一个选项可能没问题(更好?),因为副本速度很快,编译器也可能使用RVO来避免实际复制。

也许如果对象真的很大,那么你想让前者避开那个副本吗?

2 个答案:

答案 0 :(得分:1)

根据Herb Sutter和Bjarne Stroustrup的CppCoreGuidelines,第二个例子是推荐的方法。它使代码的推理更容易,并且在某些情况下不会强迫您创建未初始化的对象。

参见指南 F.20

  

返回值是自我记录的,而&可以是进出也可以是外出,并且可能被滥用。

答案 1 :(得分:0)

在现代编译器中,返回一个对象可以用移动语义来完成,即使没有移动语义,它也足够快。

这取决于您是否希望应用范围销毁,或者您希望程序员处理您要返回的对象的所有权。