Jak widzę, inteligentne wskaźniki są szeroko stosowane w wielu rzeczywistych projektach C ++.
Chociaż niektóre inteligentne wskaźniki są oczywiście korzystne dla obsługi RAII i przeniesienia własności, istnieje również tendencja do domyślnego korzystania ze wskaźników wspólnych jako sposobu „wyrzucania elementów bezużytecznych” , aby programiści nie musieli tak dużo myśleć o alokacji .
Dlaczego współużytkowane wskaźniki są bardziej popularne niż integracja odpowiedniego urządzenia do usuwania śmieci, takiego jak Boehm GC ? (Czy w ogóle zgadzasz się, że są one bardziej popularne niż rzeczywiste GC?)
Wiem o dwóch zaletach tradycyjnych GC w porównaniu z liczeniem referencji:
- Konwencjonalne algorytmy GC nie mają problemu z cyklami odniesienia .
- Liczba referencyjna jest na ogół wolniejsza niż właściwy GC.
Jakie są powody używania inteligentnych wskaźników liczących referencje?
std::unique_ptr
jest wystarczające i jako takie ma zerowe obciążenie ponad surowymi wskaźnikami pod względem wydajności w czasie wykonywania. Używającstd::shared_ptr
wszędzie, możesz również zaciemnić semantykę własności, tracąc jedną z głównych zalet inteligentnych wskaźników innych niż automatyczne zarządzanie zasobami - jasne zrozumienie intencji kodu.