我有一个对象,在其最基本的级别,看起来像这样:C++常量性为C包装
#include <X11/Xlib.h>
class x_link {
public:
x_link()
{
display_ = XOpenDisplay(NULL);
}
~x_link()
{
XCloseDisplay(display_);
}
Display* display_ptr() const
{
return display_;
}
private:
Display* display_;
};
我想知道“常量”如何x_link::display_ptr()
应该在的情况下喜欢这个。
这个较旧的问题Should member functions be “const” if they affect logical state, but not bitwise state?给我的印象是,由于我的方法本身不影响对象的逻辑状态或按位状态,所以const
是要走的路。
但与此同时,提供Display*
允许用户打破对象(例如,通过自己调用XCloseDisplay()
),这将是一个非常非常量的事情。
有什么想法?
为什么你提供访问私人指针? –
,因为生命短暂,Xlib巨大。除非我在这个对象中提供了一个我关心的Xlib的所有部分的接口(这是可能的,但它意味着一个大的专用对象),其他代码将需要访问该指针。 – tecu
这看起来像一个简单的RAII风格的使用。任何你为什么不用'std :: shared_ptr'(或'boost :: shared_ptr')来定制删除器的原因?它将帮助你获得像复制构造函数和赋值工作的东西。 –