在 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
}