表現在下面的代碼,在foo
斷言失敗:移動語義出乎意料
void bar (std::shared_ptr<int> && value) {
}
void foo() {
auto ptr = std::make_shared<int>(5);
bar(std::move(ptr));
assert(ptr == nullptr);
}
共享指針仍然指向呼叫到bar
後的值5。我期望撥打bar
的電話使用移動語義,並將ptr
留空。
我的理解缺陷在哪裏?
你在哪裏期待它移動到什麼呢? – Galik
'std :: move()'聲明:'template < class T > constexpr typename std :: remove_reference :: type && move(T && t);'返回值:'static_cast :: type &&>(t)'用法完美轉發,通過引用或右值引用採用't',並將其轉換爲右值引用。 –