Referencje -- przekzywnie do konstruktora

Referencje -- przekzywnie do konstruktora
N0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 55
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?

HO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 283
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.

N0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 55
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?

HO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 283
1

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

Kopiuj
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;
HO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 283
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.

MasterBLB
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1454
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ć.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.