【发布时间】:2013-07-09 16:42:09
【问题描述】:
我想使用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))
{
}
我很难理解移动语义,并且会发现从这个示例中学习起来更容易。如果这是香草指针,我会很好,但我正在尝试理解新方法!
【问题讨论】:
-
unique_ptr<T> second = first; -
这里没有问题。
-
对不起,我应该更具体,我收到以下错误消息,上面的代码:
Error 1 error C2664: 'std::unique_ptr<_Ty>::unique_ptr(std::nullptr_t) throw()' : cannot convert parameter 1 from 'NativeWindow' to 'std::nullptr_t' -
@H2CO3 不是
unique_ptr<T> second = std::move(first);? -
@H2CO3 不,它仍然无法正常工作。
unique_ptr不会转移所有权,除非您明确地std::move或.release()托管指针。如果它符合您的要求,我们就不需要它,auto_ptr就足够了。
标签: c++ std move-semantics unique-ptr