如何在 C++'11 中更改指针的所有权?
How to change ownership of pointer in C++'11?
我想使用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))
{
}
相关文章:
- 智能指针概念所有权和寿命
- 如何指示指针C++所有权
- 如何将所有权从一个共享指针向量转移到另一个向量?
- C++类指针和所有权
- 什么是资源或指针的所有权?
- 进入智能指针,如何处理代表所有权
- 将智能指针所有权转移到容器
- 将原始指针的所有权转移到unique_ptr
- 明智的指针所有权语义和平等
- EIGEN地图 - 它是否占数据指针的所有权
- 带有原子变量的指针所有权
- 如果指针已经被删除,指针容器怎么能拥有指针的所有权
- 是否使用unique_ptr作为所有权和原始指针
- 文件输入和指针所有权语义
- 指针所有权
- Objective-C ARC 指针所有权与C++
- 唯一的指针所有权
- 复杂设计中的Shared_ptr和逻辑指针所有权用例
- c++ 11智能指针所有权和类型转换
- 声明现有原始指针所有权的正确方法