🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.c
Article #272407

Re: Odśmiecania współbieżnego ciąg dalszy

#272407
From: Marcin ‘Qrczak’ Kowalczyk
Date: Sun, 02 Mar 2008 10:44
42 lines
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-mail
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>

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