Can someone explain whether this is ok or not?
#include <iostream>
#include <vector>
struct A {
    std::vector<int> numbers;
    ~A() {std::cout << "A destroyed.\n";}
    const std::vector<int>& getNumbers() const {return numbers;}
    std::vector<int> getNumbersByValue() const {return numbers;}
};
std::vector<int> foo() {
    A a;
    a.numbers = {1,2,3,4,5};
//  return a.getNumbersByValue();  // This works of course.
    return a.getNumbers();  // Is this line wrong?
}
void useVector(std::vector<int>& v) {
    for (int i = 6; i <=10; i++)
    v.push_back(i);
}
int main() {
    auto v = foo();  // A destroyed.
    for (int x : v) std::cout << x << ' ';  // 1 2 3 4 5
    std::cout << '\n';
    useVector(v);
    for (int x : v) std::cout << x << ' ';  // 1 2 3 4 5 6 7 8 9 10
}
Since a is destroyed in foo(), then a.numbers is destroyed too, right?  If foo() returns a copy of a.numbers, using A::getNumbersByValue(), then everything is fine.  But above I'm using getNumbers(), which returns it by reference.  The vector still survives after foo() ends.  So I pass the vector into the function useVector to see if it still survives, and it does.  So is everything ok here?
 
    