使用指针时的 C++ 移动语义

Han*_*ank 0 c++ move-semantics

move使用原始指针时如何使用赋值运算符。

除了这样做之外还有其他方法吗:

void Function(T* dest)
{
    T* src = LoadT();
    (*dest) = std::move(*src);
    delete src;
}
Run Code Online (Sandbox Code Playgroud)

Ded*_*eak 5

你的举动没问题。src指向的对象将被移动到dest指向的对象中。

关于您更新的代码示例,带有 Function 的版本:

如果您的 LoadT() 返回一个指向用 new 分配的对象的原始指针,该指针不会存储在其他地方并随后被删除,那么您将出现内存泄漏。

当您 std::move 某些东西时,您移动该对象的内容,该对象本身仍然活着,只是“空”/移动后保持它的任何状态。

如果您返回一个指向其他人拥有的对象的指针,并且将以某种方式在此处看到的代码之外进行清理,您可以通过更改指向引用的指针来明确这一点 - 这样您将显式指定:保证指针不为空;b) 不必担心删除从 LoadT 获得的对象,因为引用不能拥有该对象的所有权。