Rozważmy następujący kod:Czy przeniesiony z shared_ptr jest gwarantowany do opróżnienia?
struct Bar
{
std::shared_ptr<int> MemberFunction()
{
return std::move(m_memberVariable);
}
std::shared_ptr<int> m_memberVariable;
};
To jest zagwarantowane, że std::move
z shared_ptr<T>
rzeczywiście usunąć odwołanie w zmiennej członkiem? Czy mam kopiowanie, jasne i powrócić kopię tego zagwarantować *
Oczywiście w przypadku unique_ptr<T>
to jednak słusznie (nie może on być może nie), ale nie standardowy gwarancyjny że std::move
d od shared_ptr
uwalnia odniesienie? [Gdy jest to zmienna członkiem, statyczny lub globalny, mieszkańcy nie mają znaczenia, ponieważ wykraczają one poza zakresem]
* ewentualnie „wymiany i powrót” jest lepsze niż „kopia, jasny i powrotu ".
Czy chcesz w praktyce, czy chcesz rozdział i werset od normy? W praktyce, nawet jeśli standardowi brakowało nalegań na to, każdy kompilator, który to zrobił byłby uważany za zły. – Yakk