如何在 C++'11 中更改指针的所有权?

How to change ownership of pointer in C++'11?

本文关键字:指针 所有权 C++      更新时间:2023-10-16

我想使用unique_ptr<NativeWindow>存储一个指向本机窗口实例的指针,这样当Window对象超出范围时,它就可以保证被释放。

// This would be maintained by a window manager
unique_ptr<Window> window;
void Foo() {
    NativeWindow *pNativeWindow = createNativeWindow();
    window = new Window(pNativeWindow);
}
// ...
class Window {
private:
    unique_ptr<NativeWindow> _nativeWindow;
public:
    inline NativeWindow& GetNativeWindow() {
        return *_nativeWindow;
    }
// ...
Window::Window(NativeWindow&& nativeWindow)
    : _nativeWindow(std::move(nativeWindow))
{
}

我很难理解移动语义,从这个例子中学习会更容易。如果这是香草指针,我会很好,但我正在努力理解新的方式!

Window构造函数应该采用NativeWindow *,而不是NativeWindow&&

Window::Window(NativeWindow* nativeWindow)
    : _nativeWindow(nativeWindow)
{
}

这应该有效,但我建议您将参数改为unique_ptr<NativeWindow>。这表明Window对象假定NativeWindow参数的所有权。

Window::Window(std::unique_ptr<NativeWindow> nativeWindow)
    : _nativeWindow(std::move(nativeWindow))
{
}