我看到了以下代码段:
class WindowHandle {
public:
WindowHandle(WINDOW_HANDLE handle) : w(handle) {}
~WindowHandle() { destoryWindow(w); }
operator WINDOW_HANDLE() { return w; }
...
private:
WINDOW_HANDLE w;
...
}
这是一个问题:如何使用运算符WINDOW_HANDLE()来获取原始指针?我按如下方式列出我的猜测:
WindowHandle win(createWindow());
WINDOW_HANDLE winPtr = win.operator WINDOW_HANDLE(); // I am not sure whether this is correct.
谢谢
答案 0 :(得分:6)
简单地
WINDOW_HANDLE winPtr = win;
就足够了。用户定义的运算符创建隐式转换。
答案 1 :(得分:3)
它允许你施放:
WINDOW_HANDLE winPtr = static_cast<WINDOW_HANDLE>(win);
答案 2 :(得分:0)
您要显示的代码的目的是自动关闭句柄。因此,您进行一次创建WINDOW_HANDLE的调用,然后将其放入包装类中,该类将为您关闭它。
主要问题是它有一个隐式构造函数,没有重载的复制构造函数或赋值运算符,它的析构函数会破坏句柄。
因此,你很可能会遇到麻烦。
运营商WINDOW_HANDLE(这是合法的,ThiefMaster,它是一种隐式转换)的目的是允许用户将WindowHandle传递给实际需要WINDOW_HANDLE的函数。转换应该是const方法。 (毕竟,它没有通过参考)。
虽然该语言已经为您提供了这样的功能,但最好不要使用它。最好使用get()
方法。
没有必要编写这样的代码,因为你可以使用boost::unique_ptr
来实现这个目的,如果你不需要它可以复制和boost :: shared_ptr,如果你这样做,并且在任何一种情况下你用它创建它删除函数,在本例中为DestroyWindow