Powodem, dla którego pytam, jest to, że istnieją sprzeczne informacje w Internecie. Z jednej strony na isocpp.org stwierdza, że GCC 4.8.1 ma całkowicie zaimplementowany standard C++ 11. Z drugiej strony, GCC C++11 support page stwierdza, że nie ma "minimalnego wsparcia dla wykrywania wycieków i wykrywania wycieków opartego na osiągalności". Czy GCC 4.8.1 naprawdę jest kompletny w C++ 11?Czy gcc 4.8.1 ma obsługę C++ 11 do zbierania śmieci?
Odpowiedz
Obsługa usuwania śmieci jest opcjonalna w standardzie (patrz Bjarne Stroustrup C++11 FAQ). Dlatego GCC 4.8.1 jest kompletny, ponieważ implementuje wszystkie obowiązkowe główne części standardu.
Komentarze potwierdziły, że moja odpowiedź jest niejasna, będę bardziej konkretny: mówiłem tylko o podstawowym wsparciu dla zbierania śmieci. Część biblioteczna jest obowiązkowa. Wersja libstdC++ dostarczana z GCC 4.8.1 nie jest w pełni zgodna z C++ 11 (na przykład <regex>
nie działa), a ABI do czyszczenia pamięci jest częścią brakujących funkcji.
+1, patrz [Wniosek N2670] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2670.htm): * Implementacja, która nie obsługuje usuwania i narzędzi do zbierania śmieci wszystkie wywołania biblioteki opisane tutaj jako no-ops są zgodne. * – syam
Zapewnienie GC jest opcjonalne, pod warunkiem, że * wsparcie * dla GC nie jest. Pozycja w statusie gcc C++ 11 odnosi się do * wsparcia * dla GC i nie jest zaimplementowana. To znaczy, używając powyższego komentarza Syama: wykonanie GC jest opcjonalne (połączenia mogą być bez opcji), ale interfejs musi być obecny (nie jest to opcjonalne) –
Czy zbiórka odpadów nie jest opcjonalna? –
Gcc 4.8 jest w pełni zgodny z C++ 11 na poziomie podstawowym, co nie oznacza, że implementacja biblioteki jest w pełni zgodna z C++ 11. –
@Mechanicalsnail: GC jest opcjonalne, minimalna obsługa GC nie jest i nie występuje w gcc od wersji 4.8 –