Article View: pl.comp.lang.c
Article #309541Re: C++: Inteligentne wskaźniki i dll-e
From: bartekltg
Date: Fri, 29 Dec 2017 11:03
Date: Fri, 29 Dec 2017 11:03
46 lines
3241 bytes
3241 bytes
On Friday, December 29, 2017 at 9:36:19 AM UTC+1, AK wrote:
> Użytkownik <szykcech@gmail.com> napisał:
> >> W przypadku QSharedPointer najlepiej przekazywać QWeakPointer i sprawdzać czy pointer jest
> >> poprawny.
>
> > Jak to sprawdzić czy "pointer jest poprawny"?!?
>
> Normalnie. Jak wiekszosc weak pointerow.
>
> if ( weak_ptr )
> {
> // poprawny => obiekt dostepny
> }
I co zrobisz z samym weak, skoro nie można na nim zrobić dereferencji;>
A jeśli takiego masz, to w trzeciej linijce ostatni shared_ptr zniknie
i zniknie nasz obiekt. Bum;)
Trzeba wyciągnać z weak shared (i ta operacja mówi, czy się powiodła)
i operować sobie na nowy wspoldzeiolonym, który nam zapewnia istnienie
obiektu na czas naszej operacji.
W std coś w rodzaju
if (auto observe = weak.lock()) {
//observe jest shared_ptr, istnieje aż po zamykającą klamerkę.
....
}
BTW, nie bardzo rozumiem radę, by przekazywać weak_ptr.
Czy przekazywać weak_ptr czy shared_ptr zależy od tego,
co cheć z tym zrobić.
Jeśli daje jakiś zasób z biblioteki, to najcześceij chcę
przekazać własność, czyli daje shared (a w 90% przypadków
jeszcze prościej - unique_ptr). Jaki jest sens dawania weak_ptr,
wtedy biblioteka musi mieć trzymać shared_ptr. Kiedy go zwolni?
Jak wywołam moja_biblikteka::free_badziew()?
Wtedy cała zabawa ze sprytnimi wskaźnikami traci sens,
a za pol roku ktoś zapomni o free_badziew i będzie wyciek;-)
Piszę o bibliotece, bo to uniwersalne. Jak wpakujemy to w dll,
to dochodzą do tego wszystkie opisane wcześniej problemy;-)
pzdr
bartekltg
Technical Details
Message-ID:
<da240fba-bdb6-4cff-8ecf-5a3f9db4181b@googlegroups.com>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!peer03.am4!peer.am4.highwinds-media.com!peer01.iad!feed-me.highwinds-media.com!news.highwinds-media.com!m31no3496839qtf.0!news-out.google.com!t48ni1225qtc.1!nntp.google.com!m31no3496836qtf.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mailReferences:
<4bb38da4-2049-4e40-a507-3c1490d05d7e@googlegroups.com> <405033b7-1e7f-4850-9493-d2e0a7ab259f@googlegroups.com> <p22o44$1ur1$1@gioia.aioe.org> <a41c7232-f19c-4ec2-9af7-bb8c4dcbc222@googlegroups.com> <da02d9bf-bb79-4ce2-b2ab-b2523bcfe1d8@googlegroups.com> <p24uq0$1ge0$1@gioia.aioe.org>Show Full Headers
Complete Article Headers
X-Received: by 10.55.39.131 with SMTP id n125mr7949101qkn.57.1514545395424; Fri, 29 Dec 2017 03:03:15 -0800 (PST) X-Received: by 10.31.165.202 with SMTP id o193mr3147078vke.9.1514545395099; Fri, 29 Dec 2017 03:03:15 -0800 (PST) Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!peer03.am4!peer.am4.highwinds-media.com!peer01.iad!feed-me.highwinds-media.com!news.highwinds-media.com!m31no3496839qtf.0!news-out.google.com!t48ni1225qtc.1!nntp.google.com!m31no3496836qtf.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail Newsgroups: pl.comp.lang.c Date: Fri, 29 Dec 2017 03:03:14 -0800 (PST) In-Reply-To: <p24uq0$1ge0$1@gioia.aioe.org> Complaints-To: groups-abuse@google.com Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=80.54.0.14; posting-account=CvUQzQoAAABvVQmR58QmR6N4Cev1qhAS NNTP-Posting-Host: 80.54.0.14 References: <4bb38da4-2049-4e40-a507-3c1490d05d7e@googlegroups.com> <405033b7-1e7f-4850-9493-d2e0a7ab259f@googlegroups.com> <p22o44$1ur1$1@gioia.aioe.org> <a41c7232-f19c-4ec2-9af7-bb8c4dcbc222@googlegroups.com> <da02d9bf-bb79-4ce2-b2ab-b2523bcfe1d8@googlegroups.com> <p24uq0$1ge0$1@gioia.aioe.org> User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <da240fba-bdb6-4cff-8ecf-5a3f9db4181b@googlegroups.com> Subject: Re: C++: Inteligentne wskaźniki i dll-e From: bartekltg <bartekltg@gmail.com> Injection-Date: Fri, 29 Dec 2017 11:03:15 +0000 X-Received-Bytes: 3269 X-Received-Body-CRC: 1621663480 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit