Ich lerne gerade C++ und bin etwas verwirrt über das Konzept, eine Referenz von einer Methode zurückzugeben. Betrachten Sie das folgende Spielzeug Beispiel:Einen Verweis auf eine Kopie aus einer C++ - Methode zurückgeben
#include <iostream>
#include <vector>
class IntHolder {
private:
std::vector<int> d_values;
public:
IntHolder() {
d_values.push_back(1);
d_values.push_back(2);
d_values.push_back(3);
}
std::vector<int> &values() {
return d_values;
}
};
int main(int argc, char **argv) {
IntHolder h;
std::vector<int> ret_val = h.values();
std::cout << ret_val.size() << std::endl;
ret_val.push_back(4);
ret_val.push_back(5);
std::cout << h.values().size() << std::endl;
return 0;
}
Dies druckt die folgenden auf die Standardausgabe:
3
3
Da wir einen Verweis auf d_values
zurückkehren, sollte nicht das Objekt zurückgegeben die gleichen sein, die gespeichert wird in der Instanz von IntHolder
, und damit wieder beim Aufruf h.values()
, sollten wir eine Größe von 5 sehen?
Da dies nicht der Fall ist, was ist der Unterschied zwischen Rückgabe einen Verweis auf ein Objekt oder eine Kopie des Objekts? Gibt es einen Unterschied, wenn Sie von einer Methode zurückkehren?
Oder einfacher, 'auto & ret_val' ... –