Czy std :: weak_ptrs wpływa na dealokację pamięci przydzielonej przez std :: make_shared?

Jeśli zadzwonięstd::make_shared<T> (zamiast tylko przydzielaćshared_ptr<T> jawnie), a następnie oczekuję, że liczba referencji zostanie przydzielona w pamięci obok instancji T, ze względu na wydajność. Wszystko dobrze i dobrze.

Ale jeśli mamweak_ptr instancje odwołujące się do tego samego obiektu, prawdopodobnie będą potrzebować dostępu do tej liczby referencyjnej, aby wiedzieć, czy obiekt nadal istnieje.

Tak więc, gdy ostatni shared_ptr do instancji T zostanie zniszczony, naiwne zrozumienie systemu oznaczałoby, że nie może zwolnić pamięci, w której T jest przechowywany, ponieważ słabe_ptry nadal wymagają dostępu do tej liczby.

Wygląda na to, że jestoddzielny słaby licznik referencyjny i teoretycznie może być trzymany oddzielnie od instancji T, tak że T może zostać zniszczony, a pamięć zwolniona, podczas gdy słabe odniesienia wciąż istnieją. Ale potem wracamy do posiadania 2 oddzielnych alokacji, udaremniających korzyścimake_shared.

Zakładam, że coś tu nie rozumiem. W jaki sposób pamięć przydzielona dla instancji skonstruowana przezstd::make_shared uwolnić się, gdy istnieją słabe odniesienia?

questionAnswers(2)

yourAnswerToTheQuestion