Referencje -- przekzywnie do konstruktora

0

Nie jestem pewny jak to wygląda w tym przypadku.

Zastanawiam się, kiedy konstruktory obiektów przyjmują za parametr referencję do zmiennej. Na przykład QListWidgetItem z biblioteki Qt. Więc kiedy tworzy taki nowy item, a jego nazwa pochodzi z pola TextEditBox, to skoro przekazujemy referencję, to po zmianie w TextEditBoxie powinna się także zmienić nazwa wcześniej utworzonego obiektu?? No ale to jest bez sensu. Więc właśnie nie wiem gdzie tu jest błąd w rozumowaniu?

1

Wartość jest kopiowana a nie jest przechowywany wskaźnik. Referencja stosowana jest po to, aby nie robić przekazywania przez wartość, czyli aby nie kopiować niepotrzebnie.

0

No to jak, czegoś nie łapie, na końcu piszesz "aby nie kopiować niepotrzebnie", a na początku, "że wartość jest kopiowana a nie jest przechowywany wskaźnik", Czemu jest kopiowana skoro referencja to przekazanie adresu?

1

Wartość String jest kopiowana do membera. Przekazanie przez referencję nie powoduje natomiast narzutu przy kopiowaniu obiektu, przekazywanego do konstruktora.
Przykład:

class Foo
{
public:
 Foo( const& String _tekst ) // referencja powoduje nie kopiowanie, bez referencji byłby stworzony tymczasowy obiekt _tekst
{
   tekst = _tekst; // tutaj mamy kopiowanie do membera - wartości są niezależne
}
private:
String tekst;
1

Drążąc jeszcze temat dlaczego jest przekazanie referencji a wartości są od siebie niezależne to popatrz jak zwracane są wartości np. z QTextEdit - jako QString(nie jako QString& czy QString*), czyli to jest niezależna kopia, niezwiązana już z obiektem QTextEdit.

0
Hostel napisał(a):

Drążąc jeszcze temat dlaczego jest przekazanie referencji a wartości są od siebie niezależne to popatrz jak zwracane są wartości np. z QTextEdit - jako QString(nie jako QString& czy QString*), czyli to jest niezależna kopia, niezwiązana już z obiektem QTextEdit.

Ciężko żeby było innaczej,ponieważ przy wyjściu z funkcji lokalne zmienne na stosie są niszczone i referencja/wskaźnik pokazywałyby na unieważnioną pamięć.
W przypadku klasy QTextEdit która być może i ma nie ginący składnik QString danie dostępu do niej przez referencję/wskaźnik pozwoliłby na niejawne zmiany tego składnika,które to zachowanie jest generalnie wysoce niepożądane.
Stąd jedyną sensowną opcją jest zrobić kopię składnika i to ją zwrócić.

1 użytkowników online, w tym zalogowanych: 0, gości: 1