Pytania otagowane jako move-semantics

12
Co to jest semantyka ruchu?
Właśnie skończyłem słuchać wywiadu radiowego podcastu Software Engineering ze Scottem Meyersem na temat C ++ 0x . Większość nowych funkcji ma dla mnie sens i jestem podekscytowany C ++ 0x, z wyjątkiem jednej. Nadal nie dostaję semantyki ruchu ... Co to dokładnie jest?

7
push_back vs Situace_back
Jestem trochę zdezorientowany co do różnicy między push_backi emplace_back. void emplace_back(Type&& _Val); void push_back(const Type& _Val); void push_back(Type&& _Val); Ponieważ istnieje push_backprzeciążenie przyjmujące odwołanie do wartości, nie bardzo rozumiem, jaki jest cel emplace_back?


6
Wartości C ++ 11 i zamieszanie semantyki ruchu (instrukcja return)
Próbuję zrozumieć odwołania do wartości i przenieść semantykę C ++ 11. Jaka jest różnica między tymi przykładami i który z nich nie wykona kopii wektorowej? Pierwszy przykład std::vector<int> return_vector(void) { std::vector<int> tmp {1,2,3,4,5}; return tmp; } std::vector<int> &&rval_ref = return_vector(); Drugi przykład std::vector<int>&& return_vector(void) { std::vector<int> tmp {1,2,3,4,5}; return std::move(tmp); …



6
Dlaczego miałbym std :: przenieść std :: shared_ptr?
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; }

2
Co mogę zrobić z przeniesionym obiektem?
Czy norma precyzyjnie określa, co mogę zrobić z przedmiotem po jego przeniesieniu? Kiedyś myślałem, że wszystko, co można zrobić z przeniesionym obiektem, to go zniszczyć, ale to nie wystarczy. Na przykład weź szablon funkcji swapzdefiniowany w bibliotece standardowej: template <typename T> void swap(T& a, T& b) { T c = …

6
Jak używać niestandardowego narzędzia do usuwania z elementem członkowskim std :: unique_ptr?
Mam klasę z członkiem unique_ptr. class Foo { private: std::unique_ptr<Bar> bar; ... }; Bar jest klasą strony trzeciej, która ma funkcje create () i niszczą (). Gdybym chciał użyć std::unique_ptrz nim jako samodzielnej funkcji, mógłbym zrobić: void foo() { std::unique_ptr<Bar, void(*)(Bar*)> bar(create(), [](Bar* b){ destroy(b); }); ... } Czy można …


4
Kiedy uczynić typ nieruchomym w C ++ 11?
Byłem zaskoczony, że to nie pojawiło się w moich wynikach wyszukiwania, pomyślałem, że ktoś by zapytał o to wcześniej, biorąc pod uwagę użyteczność semantyki ruchu w C ++ 11: Kiedy muszę (lub czy jest to dobry pomysł) uczynić klasę nieruchomą w C ++ 11? ( To znaczy przyczyny inne niż …

1
Nie można wyjść z wypożyczonych treści / nie można wyjść poza udostępnione odniesienie
Nie rozumiem błędu cannot move out of borrowed content. Otrzymałem go wiele razy i zawsze go rozwiązywałem, ale nigdy nie rozumiałem dlaczego. Na przykład: for line in self.xslg_file.iter() { self.buffer.clear(); for current_char in line.into_bytes().iter() { self.buffer.push(*current_char as char); } println!("{}", line); } powoduje błąd: error[E0507]: cannot move out of borrowed …

6
Operator przypisania ruchu i `if (this! = & Rhs)`
W operatorze przypisania klasy zwykle musisz sprawdzić, czy przypisywany obiekt jest obiektem wywołującym, aby nie zepsuć rzeczy: Class& Class::operator=(const Class& rhs) { if (this != &rhs) { // do the assignment } return *this; } Czy potrzebujesz tego samego dla operatora przypisania ruchu? Czy jest kiedykolwiek sytuacja, w której this …

3
Jaka jest zaleta używania odwołań do przekazywania w pętlach opartych na zakresach?
const auto&wystarczy, jeśli chcę wykonywać operacje tylko do odczytu. Jednak wpadłem na for (auto&& e : v) // v is non-const ostatnio kilka razy. To sprawia, że ​​zastanawiam się: Czy to możliwe, że w niektórych niejasnych przypadkach narożnych korzystanie z odniesień do przekazywania przynosi pewne korzyści w zakresie wydajności w …

2
W jaki sposób std :: move () przenosi wartości do RValues?
Po prostu stwierdziłem, że nie w pełni rozumiem logikę std::move(). Na początku wyszukałem go w Google, ale wydaje się, że są tylko dokumenty o tym, jak używać std::move(), a nie o tym , jak działa jego struktura. Chodzi mi o to, że wiem, jaka jest funkcja elementu członkowskiego szablonu, ale …

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.