Article View: pl.comp.lang.c
Article #272407Re: Odśmiecania współbieżnego ciąg dalszy
From: Marcin ‘Qrczak’ Kowalczyk
Date: Sun, 02 Mar 2008 10:44
Date: Sun, 02 Mar 2008 10:44
42 lines
3681 bytes
3681 bytes
Dnia 02-03-2008, N o godzinie 09:59 +0000, Sektor van Skijlen pisze:
> Jedynym ficzerem, który jest zaimplementowany i zaakceptowany
> równocześnie to rvalue-reference; ficzer, który budzi niestety u mnie
> mieszane uczucia (jestem zdania, że nawet jeśli trochę pomoże, to też
> i wiele zaszkodzi C++).
Rvalue references pozwalają rozwiązać problem, który w C++ jest bardzo
ważny: przenoszenie obiektów (move semantics).
Teraz jest tak, że jeśli mamy vector<vector<T> >, to realokacja
zewnętrznego wektora pociąga za sobą zrobienie kopii wszystkich
wewnętrznych wektorów razem ze wszystkimi obiektami typu T, a potem
usunięcie oryginałów. Z move semantics wystarczy przenosić obiekty
wielkości sizeof(vector<T>), bez ruszania obiektów typu T. Nie jest
nawet potrzebna dostępność konstruktora kopiującego T.
Rvalue references nie są jedyną możliwą drogą uzyskania move semantics,
ale są całkiem dobrą drogą. Z rvalue references przenoszenie wyraża się
konstruktorem o sygnaturze podobnej do konstruktora kopiującego, przy
czym konstruktor ten jest wołany tylko w sytuacji, w której obiekt,
z którego przenosimy, nie będzie już później wykorzystywany i zostanie
tylko zawołany jego destruktor.
Można sobie wyobrazić inny interfejs opisywania przenoszenia obiektów
danego typu, np. zawarcie destrukcji oryginału już w czasie przenoszenia,
ale to by mogło być trudniejsze w poprawnym oprogramowaniu, zwłaszcza
w obliczu wyjątków, i zdecydowano się na rvalue references.
W językach, w których wartościami są referencje, a nie kopie obiektów,
co prawda pewne konstrukcje są mniej efektywne (pojawia się więcej
osobno zaalokowanych obiektów), ale za to cała komplikacja z move
semantics jest niepotrzebna. Ba, niepotrzebne są już konstruktory
kopiujące (tzn. sporadycznie może się przydać tworzenie kopii obiektu
danego rodzaju, ale to jest operacja biblioteczna jak każda inna,
która nie bierze udziału w semantyce przekazywania argumentów funkcji
itp.).
--
__("< Marcin Kowalczyk
\__/ qrczak@knm.org.pl
^^ http://qrnik.knm.org.pl/~qrczak/
Technical Details
Message-ID:
<1204454647.13441.20.camel@qrnik>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!opal.futuro.pl!news.internetia.pl!newsfeed.tpinternet.pl!newsfeed.neostrada.pl!nemesis.news.neostrada.pl!atlantis.news.neostrada.pl!news.neostrada.pl!news.tpi.pl!not-for-mailReferences:
<fppvdq$68v$1@inews.gazeta.pl> <fq0od3$5bm$1@inews.gazeta.pl> <fq0qpa$ekv$1@inews.gazeta.pl> <fq0s58$jvv$1@inews.gazeta.pl> <fq0tjl$shn$1@news.vectranet.pl> <fq10ir$8nn$1@inews.gazeta.pl> <fq140s$2u6$1@news.vectranet.pl> <fq164t$3bl$1@inews.gazeta.pl> <fq1r6d$586$1@kujawiak.man.lodz.pl> <fq3b1p$i9b$1@inews.gazeta.pl> <fq3g89$362$1@kujawiak.man.lodz.pl> <fq3p6m$mk9$1@inews.gazeta.pl> <1d522c1c-c339-4c26-a2ee-5621dd0e4883@e23g2000prf.googlegroups.com> <fqdtq1$1ht$1@kujawiak.man.lodz.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!opal.futuro.pl!news.internetia.pl!newsfeed.tpinternet.pl!newsfeed.neostrada.pl!nemesis.news.neostrada.pl!atlantis.news.neostrada.pl!news.neostrada.pl!news.tpi.pl!not-for-mail From: Marcin ‘Qrczak’ Kowalczyk <qrczak@knm.org.pl> Newsgroups: pl.comp.lang.c Subject: Re: Odśmiecania współbieżnego ciąg dalszy Date: Sun, 02 Mar 2008 11:44:07 +0100 Organization: TP - http://www.tp.pl/ Lines: 52 Message-ID: <1204454647.13441.20.camel@qrnik> References: <fppvdq$68v$1@inews.gazeta.pl> <fq0od3$5bm$1@inews.gazeta.pl> <fq0qpa$ekv$1@inews.gazeta.pl> <fq0s58$jvv$1@inews.gazeta.pl> <fq0tjl$shn$1@news.vectranet.pl> <fq10ir$8nn$1@inews.gazeta.pl> <fq140s$2u6$1@news.vectranet.pl> <fq164t$3bl$1@inews.gazeta.pl> <fq1r6d$586$1@kujawiak.man.lodz.pl> <fq3b1p$i9b$1@inews.gazeta.pl> <fq3g89$362$1@kujawiak.man.lodz.pl> <fq3p6m$mk9$1@inews.gazeta.pl> <1d522c1c-c339-4c26-a2ee-5621dd0e4883@e23g2000prf.googlegroups.com> <fqdtq1$1ht$1@kujawiak.man.lodz.pl> NNTP-Posting-Host: hjd150.internetdsl.tpnet.pl Mime-Version: 1.0 X-Trace: nemesis.news.neostrada.pl 1204455031 27690 79.187.237.150 (2 Mar 2008 10:50:31 GMT) X-Complaints-To: usenet@tpi.pl NNTP-Posting-Date: Sun, 2 Mar 2008 10:50:31 +0000 (UTC) In-Reply-To: <fqdtq1$1ht$1@kujawiak.man.lodz.pl> X-Mailer: Evolution 2.12.1 PLD Linux Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit