Referencje -- przekzywnie do konstruktora

Referencje -- przekzywnie do konstruktora
N0
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 11 lat
  • 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:ponad 13 lat
  • Ostatnio:około 11 lat
  • 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.


Jeśli uważasz mój post za wartościowy - daj punkt.
Mój post pomógł Ci rozwiązać problem - zaznacz go. Pozdrawiam
N0
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 11 lat
  • 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?

n0name_l
To jest przekazanie adresu i jedynie ten adres jest kopiowany, sila rzeczy cos skopiowac trzeba.
N0
no jasne, dzięki ;)
HO
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 11 lat
  • 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;

Jeśli uważasz mój post za wartościowy - daj punkt.
Mój post pomógł Ci rozwiązać problem - zaznacz go. Pozdrawiam
HO
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 11 lat
  • 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.


Jeśli uważasz mój post za wartościowy - daj punkt.
Mój post pomógł Ci rozwiązać problem - zaznacz go. Pozdrawiam
N0
O właśnie o to mi konkretnie chodziło. Dzięki!
MasterBLB
  • Rejestracja:około 19 lat
  • Ostatnio:2 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ć.


"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]

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.