Więc pisałem jakiś kod, a ja miałem coś takiego:Czy istnieje właściwy sposób na zwrócenie nowej instancji obiektu przez odwołanie w C++?
class Box
{
private:
float x, y, w, h;
public:
//...
Rectangle & GetRect(void) const
{
return Rectangle(x, y, w, h);
}
};
potem w jakiś kod:
Rectangle rect = theBox.GetRect();
który działał w moim debugowania, ale w wydaniu były „problemy "zwracanie tego prostokąta przez odniesienie - w zasadzie otrzymałem niezainicjowany prostokąt. Klasa Rectangle ma operator = i konstruktor kopii. Nie wdając się w to, dlaczego to się zepsuło, bardziej interesuje mnie poprawny sposób zwrócenia (nowego) obiektu przez odniesienie dla celów kopiowania do zmiennej . Czy jestem po prostu głupi? Czy nie powinno to być zrobione? Wiem, że mogę zwrócić wskaźnik, a następnie usunąć dereferencję z zadania, ale wolałbym nie. Jakaś część mnie czuje, że powracanie przez wartość skutkowałoby redundantnym kopiowaniem obiektu - czy kompilator je wymyślił i zoptymalizował?
Wydaje się, że to banalne pytanie. Czuję się prawie zakłopotany, nie wiem o tym po wielu latach kodowania w C++, więc mam nadzieję, że ktoś może to dla mnie wyjaśnić. :)
pamiętać, że istnieje żadne przyporządkowanie w kodzie. –