什么是安全的?从函数返回结构或指针

Ram*_*h-X 11 c++ struct return function

#include <iostream>

struct person_t{
        int age;
};

person_t get_person1(){
        person_t person;
        person.age = 10;
        return person;
}

person_t * get_person2(){
        person_t *person = new person_t;
        person->age = 20;
        return person;
}

int main(){
        person_t person1 = get_person1();
        person_t *person2 = get_person2();
        std::cout << person1.age << std::endl;
        std::cout << person2->age << std::endl;
        delete person2;
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

我想知道从函数返回结构的最安全的方法是什么.

正如在这里这里的问题的答案中所说,当你创建一个对象时get_person1(),该对象将在它超出范围之后被销毁.

但是当我搜索"如何从函数c ++返回一个结构"时,它建议我使用方法一(带有get_person1())(这里的例子).但我认为该方法会在调用函数后销毁对象,我认为方法2是最安全的.

我错了吗?或者关于这个话题的任何意见..?

谢谢!!

Gab*_*iel 8

使用按值返回有三个原因:

  • 它使您的代码可读
  • 你的结构在这里很小(一个int)所以它就像返回一个int.你可以用C++做到这一点,效率很高
  • 在C++ 17(以及之前的大多数编译器)中,将避免对象的中间副本的成本.它被称为RVO.你需要在get_person函数中只输入一个返回值.

  • 好吧,RVO早在C++ 17之前就已经工作了,这只是强制要求. (2认同)
  • 究竟.我很伤心,在那之前的大多数编译器中 (2认同)