Dobrze rozumiem większość teorii OO, ale jedną z rzeczy, która mnie bardzo dezorientuje, są wirtualne niszczyciele. Myślałem, że destruktor zawsze jest wywoływany bez względu na wszystko i dla każdego obiektu w łańcuchu. Kiedy masz je uczynić wirtualnymi i dlaczego?
std::shared_ptr<Object> p1 = std::make_shared<Object>("foo"); std::shared_ptr<Object> p2(new Object("foo")); Wiele postów z Google i Stackoverflow jest na ten temat, ale nie jestem w stanie zrozumieć, dlaczego make_sharedjest bardziej wydajny niż bezpośrednie korzystanie shared_ptr. Czy ktoś może mi wyjaśnić krok po kroku sekwencję obiektów utworzonych i operacji wykonanych przez oba, aby móc zrozumieć, …
Gdy funkcja przyjmuje wartość shared_ptr (z boost lub C ++ 11 STL), przekazujesz ją: według stałej referencji: void foo(const shared_ptr<T>& p) lub według wartości void foo(shared_ptr<T> p):? Wolałbym pierwszą metodę, ponieważ podejrzewam, że byłaby szybsza. Ale czy to naprawdę jest tego warte, czy są jakieś dodatkowe problemy? Czy możesz podać …
Zacząłem studiować inteligentne wskaźniki C ++ 11 i nie widzę pożytecznego zastosowania std::weak_ptr. Czy ktoś może mi powiedzieć, kiedy std::weak_ptrjest przydatny / konieczny?
Mam ten kod, który nie działa, ale myślę, że cel jest jasny: testmakeshared.cpp #include <memory> class A { public: static ::std::shared_ptr<A> create() { return ::std::make_shared<A>(); } protected: A() {} A(const A &) = delete; const A &operator =(const A &) = delete; }; ::std::shared_ptr<A> foo() { return A::create(); } Ale …
Tylko małe zapytanie dotyczące shared_ptr. Czy warto shared_ptrwskazać tablicę? Na przykład, shared_ptr<int> sp(new int[10]); Jeśli nie, to dlaczego nie? Jednym z powodów, o których już wiem, jest to, że nie można zwiększać / zmniejszać wartości shared_ptr. Dlatego nie może być używany jako normalny wskaźnik do tablicy.
Mam problem ze zrozumieniem użycia inteligentnych wskaźników jako członków klasy w C ++ 11. Dużo czytałem o inteligentnych wskazówkach i myślę, że rozumiem, jak unique_ptri shared_ptr/ weak_ptrdziała ogólnie. To, czego nie rozumiem, to prawdziwe użycie. Wygląda na to, że wszyscy zalecają używanie unique_ptrgo prawie cały czas. Ale jak bym zaimplementował …
Przeglądałem kod źródłowy Clang i znalazłem ten fragment: void CompilerInstance::setInvocation( std::shared_ptr<CompilerInvocation> Value) { Invocation = std::move(Value); } Dlaczego miałbym chcieć ?std::movestd::shared_ptr Czy jest jakiś sens przenoszenia własności do udostępnionego zasobu? Dlaczego nie miałbym po prostu tego zrobić? void CompilerInstance::setInvocation( std::shared_ptr<CompilerInvocation> Value) { Invocation = Value; }
Znalazłem kod używający std :: shared_ptr do wykonania dowolnego czyszczenia przy wyłączaniu. Na początku myślałem, że ten kod nie może działać, ale potem wypróbowałem następujące: #include <memory> #include <iostream> #include <vector> class test { public: test() { std::cout << "Test created" << std::endl; } ~test() { std::cout << "Test destroyed" …
Piszę metodę akcesora dla współdzielonego wskaźnika w C ++, która wygląda mniej więcej tak: class Foo { public: return_type getBar() const { return m_bar; } private: boost::shared_ptr<Bar> m_bar; } Tak więc, aby obsługiwać stałą getBar()zwracanego typu, powinno być a, boost::shared_ptrktóre zapobiega modyfikacji wskazanego przez Barniego. Moje przypuszczenie jest to, że …
Jeśli mam funkcję, która musi współpracować z a shared_ptr, czy nie byłoby bardziej wydajne przekazanie jej odwołania do niej (aby uniknąć kopiowania shared_ptrobiektu)? Jakie są możliwe złe skutki uboczne? Wyobrażam sobie dwa możliwe przypadki: 1) wewnątrz funkcji tworzona jest kopia argumentu, jak w ClassA::take_copy_of_sp(boost::shared_ptr<foo> &sp) { ... m_sp_member=sp; //This will …
Czytam http://gcc.gnu.org/onlinedocs/libstdc++/manual/shared_ptr.html i niektóre problemy z bezpieczeństwem wątków nadal nie są dla mnie jasne: Standardowo gwarantuje, że zliczanie referencji jest obsługiwane wątkowo i niezależne od platformy, prawda? Podobny problem - standardowa gwarancja, że tylko jeden wątek (trzymający ostatnią referencję) wywoła delete na udostępnionym obiekcie, prawda? shared_ptr nie gwarantuje żadnego bezpieczeństwa …
Czy biblioteka standardowa C ++ 11 zapewnia narzędzie do konwersji z formatu a std::shared_ptrna std::unique_ptrlub odwrotnie? Czy to bezpieczna operacja?
Jestem bardzo sfrustrowany po kilku godzinach prób znalezienia lokalizacji shared_ptr. Żaden z przykładów, które widzę, nie pokazuje pełnego kodu zawierającego nagłówki shared_ptr(i działające). Po prostu stwierdzając std, tr1i <memory>nie pomaga w ogóle! Pobrałem doładowania i wszystko, ale nadal się nie pojawiają! Czy ktoś może mi pomóc, podając dokładnie, gdzie go …
Obecnie próbuję nauczyć się korzystać z inteligentnych wskaźników. Jednak podczas niektórych eksperymentów odkryłem następującą sytuację, dla której nie mogłem znaleźć satysfakcjonującego rozwiązania: Wyobraź sobie, że masz obiekt klasy A będący rodzicem obiektu klasy B (dziecko), ale oboje powinni się znać: class A; class B; class A { public: void addChild(std::shared_ptr<B> …
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.