Warsztat » Forum

[C++] Samo-NULLujące smart pointery

Nov 18, 2009 | Liosan |
45 wypowiedzi na 3 stronach:
1 2 3
Krzysiek K.
Feb 22, 2010

Odp: Samo-NULLujące smart pointery

Cytat:
A tak, no to dorzućmy (w C++) RC i jeżeli ilość odwołań == 0 && wskazywany obiekt == 0 to kasujemy Foo_for_general_public.
(cały czas o tym problemie myślę w kategoriach Obj-C gdzie RC jest niejako wbudowane)

No i wtedy wracamy do smart pointerów.
Dab
Feb 22, 2010

Odp: Samo-NULLujące smart pointery

No nie do końca, bo smart pointer zarządzałby czasem życia Foo co w naszym przypadku nie jest potrzebne.
Krzysiek K.
Feb 22, 2010

Odp: Samo-NULLujące smart pointery

Cytat:
No nie do końca, bo smart pointer zarządzałby czasem życia Foo co w naszym przypadku nie jest potrzebne.

Dany pointer wcale nie musi zarządzać czasem życia, by być nazwanym smart pointerem.
Dab
Feb 22, 2010

Odp: Samo-NULLujące smart pointery

Dany pointer wcale nie musi się nazywać smart pointer (Meyers 2.7.6.3.1.8), by był przydatny ;)
JCoder
Feb 23, 2010

Odp: Samo-NULLujące smart pointery

Cytat:

Co powiesz na (dość popularne zdanie): "Chcę zrobić MMORPG jak WoW, tylko że lepszy"?


Problem jest źle postawiony w przeciwieństwie do tamtego.
Ale co do zerowania wskaźników, to sorry, wycofuję się. Za bardzo przyzwyczaiłem się do języków wysokiego poziomu, gdzie taką operację robi się w pięciu linijkach i to wspólnymi dla wszystkich modułów (choć nigdy nie widziałem takiej potrzeby - null jest generalnie zbędny w programowaniu wysokopoziomowym - zresztą w C++ mając template'y też nie bardzo widzę potrzebę używania nulla gdziekolwiek).

A chcecie weak_ptr, to czemu po prostu nie użyć weak_ptr z boosta?
Żeby podbudować swoje ego,  że się umie zaimplementować coś takiego samemu?


Krzysiek K.
Feb 21, 2010

Odp: Samo-NULLujące smart pointery

Cytat:
null jest generalnie zbędny w programowaniu wysokopoziomowym



Cytat:
A chcecie weak_ptr, to czemu po prostu nie użyć weak_ptr z boosta?
Żeby podbudować swoje ego,  że się umie zaimplementować coś takiego samemu?

Miałem kilka powodów:
- żeby uniknąć dodawania zależności od boosta,
- by własna implementacja była przyjaźniejsza w użyciu (brak konieczności castowania na shared_ptr),
- bu móc używać takich wskaźników z obiektami nieużywającymi shared_ptr
yarpen
Feb 23, 2010

Odp: Samo-NULLujące smart pointery

Cytat:

Cytat:

Cytat:
Aha, czyli w zasadzie równie dobrze można użytkownikom obiektu dawać wskaźnik na jakiś wskaźnik pośredni i wyjdzie na to samo.

Nie tak do końca: ID nie muszą wskazywać na konkretną pamięć, ID można bezpiecznie zapisać na dysku, itp, itd.

Ale za to musisz mieć dodatkowy mechanizm translacji między ID a wskaźnikiem (obiektem)

Tak, ten potezny mechanizm translacji to tablica :) Ogolnie rzecz biorac oba systemy sa dosyc podobne. Podstawowa wada ID jest to, ze ludzie robia translacje za czesto (czyli np. 5 razy w jednej f-kcji). Podstawowa zaleta, ze to jedyna wada. Przy slabych referencjach dochodzi nam jeszcze zbedne kopiowanie i zbedne usuwanie. W idealnym swiecie bylyby blisko siebie, ale ID to 4 bajty (albo i 2) i banalna serializacja.
Esidar
Feb 24, 2010

Odp: Samo-NULLujące smart pointery

[rant]
Tego rodzaju "smart" pointery to typowy przykład jak rozwiązać jeden problem robiąc przy tym 3 kolejne. Można by a) pomyśleć jak zminimalizować ilość tworzonych obiektów b) podzielić obiekty na krótko i długo żyjące c) podzielić logicznie kod na 2 typy tworząco-usuwający oraz korzystający.
Można oczywiście też brnąć dalej w template'y i wskaźniki do wskaźników na wskaźniki, twierdzić że jeśli "samo coś się gdzieś robi ale już nikt nie wie co i gdzie i po co" to jest to znakomite rozwiązanie wysokopoziomowe bo "teraz to już na pewno segfault się nie zdarzy"... no chyba że się zdarzy...
A potem ja dostaję taki silnik z prikazem że "ma teraz działać szybko i zajmować mało pamięci" a ja jedyne o czym wtedy myślę to "Create New Project" bo w który plik cpp nie spojrzę to jest do "wymiany" :)
[/rant]
JCoder
Feb 22, 2010

Odp: Samo-NULLujące smart pointery

Niesamowite! Jak rzadko zgadzam się z yarpenem i Esidarem! ;)
Regedit
Mar 4, 2010

Odp: Samo-NULLujące smart pointery

yarpen: Jak wobec tego najlepiej Twoim zdaniem zrealizować taki mechanizm ID do obiektów, żeby nie powodował więcej problemów z bezpieczeństwem kodu, wygodą pisania kodu czy wydajnością działania, niż omawiane tutaj samo-zerujące się inteligentne wskaźniki?
yarpen
Mar 5, 2010

Odp: Samo-NULLujące smart pointery

Cytat:

yarpen: Jak wobec tego najlepiej Twoim zdaniem zrealizować taki mechanizm ID do obiektów, żeby nie powodował więcej problemów z bezpieczeństwem kodu, wygodą pisania kodu czy wydajnością działania, niż omawiane tutaj samo-zerujące się inteligentne wskaźniki?

Z grubsza tak, jak opisalem. ID zamiast wskaznikow, jezeli potrzebny jest wskaznik to resolve'ujemy ID->wskaznik. W miejscach gdzie mamy pewnosc, ze obiekt bedzie istnial - gole wskazniki. Tutaj jest moja wycieta implementacja podobnego systemu, ktory napisalem jeszcze w SBZ: https://dl-web.dropbox.com/get/handle.txt?w=49aadabe (ten akurat byl do raycastingu na wielu watkach, ale idea praktycznie ta sama).
Regedit
Mar 13, 2010

Odp: Samo-NULLujące smart pointery

yarpen: Jasne, ale chodzi mi właśnie o to, jak resolvujesz ID -> wskaźnik, żeby to było szybkie.

Podany link niestety nie działa.
Cytat:
Oops! (403)
It seems you don't belong here! You should probably try logging in?

Zalogowanie na moje konto Dropbox niestety nie pomogło, pod podanym linkiem jest wciąż to samo.
yarpen
Mar 13, 2010

Odp: Samo-NULLujące smart pointery

Cytat:

yarpen: Jasne, ale chodzi mi właśnie o to, jak resolvujesz ID -> wskaźnik, żeby to było szybkie.

Super szybkie nigdy nie bedzie, bo jednak na 99% nie trafimy w cache. Sam koszt operacji jest jednak prawie zerowy:
http://dl.dropbox.com/u/1404873/handle.txt
(przerzucilem do kat. publicznego, powinno byc lepiej).
Strony:
1 2 3