Chciałbym użyć observer_ptr
w moim projekcie, ale paper definiuje tylko interfejs, a nie pełną implementację. Czy istnieje teraz implementacja open source, czy też muszę to zrobić samodzielnie?Czy jest teraz implementacja dla obserwatora_ptr?
Odpowiedz
Możesz utworzyć tak zwane observer_ptr
, tworząc unique_ptr
z delerem NOP.
template<typename T>
struct nop_deleter
{
void operator()(T*) const {}
};
template<typename T>
using observer_ptr = unique_ptr<T, nop_deleter>;
to nadal będzie miało zachowanie unique_ptr
„s, co oznacza, że znajduje się poruszać tylko, gdy tylko chcesz observer_ptr
być copyable. Co prowadzi nas do prostszej implementacji:
template<typename T>
using observer_ptr = T*;
To robi wszystko, co chcesz. Możesz go nazwać observer_ptr<int>
zamiast int *
, ponieważ ten drugi jest oczywiście zły. Jest kopiowalny i nie robi nic po zniszczeniu.
mam być żartobliwy odpowiedź powyżej, ale miejmy nadzieję, że będzie ona wykazać, że observer_ptr
nie ma wiele użytkowego inne niż posiadające inną nazwę niż surowiec typu wskaźnika. There's nic złego w korzystaniu z nieprzetworzonego wskaźnika nie będącego właścicielem.
Można argumentować, że observer_ptr
przekazuje zamiar, ale ten argument jest poprawny tylko wtedy, gdy baza kodu zawiera instancje surowych wskaźników zarządzających zasobami. Wyeliminuj te, a następnie surowy wskaźnik będzie automatycznie oznaczać observer_ptr
... bez wymyślnej nazwy.
Jeśli bezwzględnie musisz mieć wymyślną nazwę i/lub inny typ, samodzielne wykonanie powinno być łatwe.
Przypuszczam, że jedną z wymaganych funkcji observer_ptr jest interfejs kompatybilny z innymi standardowymi inteligentnymi wskaźnikami (mając metody takie jak reset, zamiana, get, prawdopodobnie wydanie) – lisyarus
Dziękuję bardzo :) Twoja implementacja jest elegancka, a twój pomysł jest niesamowity ! Nie sądzę, żeby używanie surowych poinerów było złe. Unikaj i używaj ich tylko wtedy, gdy jest to konieczne, ponieważ wygląda to chaos, gdy mieszają się "unique_ptr
@lisyarus Tak, interfejs jest zgodny z innymi inteligentnymi wskaźnikami i być może są okazje, kiedy tego potrzebujesz. Ale nie spotkałem się jeszcze z koniecznością generowania operacji na inteligentnym typie wskaźnika bez znajomości semantyki własności podczas gry. Ale jestem pewien, że wymyślony przykład można ugotować tam, gdzie byłoby to przydatne. W rzeczywistości narzędzie byłoby raczej ograniczone. – Praetorian
Tak: observer-ptr dla C++ 98 i dla GitHub.
- 1. Czy jest implementacja Hadley's ddply dla Pythona?
- 2. Czy JDK7 jest teraz bezpieczny?
- 3. Czy jest szybsza implementacja TList?
- 4. Czy jest implementacja VBScript Markdown?
- 5. Czy jest implementacja SQL PBKDF2?
- 6. Czy @ font-face jest teraz użyteczna?
- 7. Czy jest pełna implementacja obiektu Canvas HTML5 dla GWT?
- 8. Czy istnieje implementacja Erlang dla Androida?
- 9. Czy istnieje darmowa implementacja printf dla .net?
- 10. Czy ta pełna implementacja dodatku jest poprawna?
- 11. Czy to jest poprawna implementacja quicksort?
- 12. Czy jest to implementacja kombinatora fixpoint?
- 13. Implementacja C# dla JVM
- 14. Implementacja GZIPInputStream dla J2ME
- 15. Czy powinienem teraz napisać kodigniter?
- 16. Czy mogę teraz używać rzeczywistych instrukcji dla MySQL z PDO?
- 17. Implementacja hashtable dla C
- 18. Czy korzystanie z skrótów PHP echo jest teraz bezpieczne?
- 19. Implementacja "show" dla funkcji
- 20. Czy jest implementacja protokołu Google Buffers w implementacji jakości .NET
- 21. Czy istnieje działająca implementacja układu siatki CSS3 dla Webkita?
- 22. Implementacja layoutu dla Dojo MVC
- 23. Implementacja operatora konwersji dla wskaźnika
- 24. Implementacja Shellwords.shellescape dla Ruby 1.8
- 25. Czy jest jakaś implementacja .NET na Mac OS?
- 26. Implementacja dla CombineFileInputFormat Hadoop 0.20.205
- 27. Implementacja kolejki zadań dla Pythona
- 28. Teraz, gdy Xna nie jest obsługiwana, jaki jest lepszy wybór?
- 29. implementacja komunikatora internetowego dla szyn?
- 30. Implementacja Hashtable dla Delphi 5
Z abstrakcji nie widzę dużej różnicy w stosunku do 'weak_ptr'. Edycja: W gazecie nawet nie wspomniano o 'weak_ptrs' ... WTH ?? – RedX
@RedX: weak_ptr potrzebuje przydzielonego stanu współdzielonego i nie będzie użyteczny, chyba że obiekt jest własnością niektórych shared_ptr. Tak więc semantyka i użycie wydaje się zupełnie inne. – lisyarus
@RedX, 'weak_ptr' nie może być użyte na' unique_ptr'. – UniversE