我对 C++ 中移动语义的心智模型很困惑

问题描述 投票:0回答:0

在 C++ 中使用移动语义时,我对代码的哪一部分声称数据“所有权”的概念感到困惑。

我遇到了双重错误,这对我来说没有意义。为什么“移动”后

delete
node
会在移动不应该破坏物体时导致双重释放?它应该让一个对象处于有效但未指定的状态,并且只是将指向底层内存的内容移动。从我的
delete
函数调用
deleter
时,属于
node
main
与传递给
node
deleter
不同吗?当我移动指针时会发生什么?

template<typename U>
void deleter(U&& node) {
    //delete pointer
    delete node;
}

template<typename T>
foo(T&& node) {
    //call my deleter function, forward rvalue reference
    deleter(std::forward<T>(node));
}

int main() {
    //create pointer to node
    Node* node = new Node();

    //move my pointer
    foo(std::move(node));

    delete node;     //double free
}
c++ move-semantics
© www.soinside.com 2019 - 2024. All rights reserved.