c – 此函数应返回什么类型的对象?
发布时间:2020-12-16 05:57:41 所属栏目:百科 来源:网络整理
导读:考虑这个课程: class Widget{ Widget::Widget(); bool initialize();} Widget具有以下特征: 必须调用initialize()才能完全构造 initialize()可能会失败 initialize()很贵 鉴于此,我在工厂函数中封装创建,它始终返回相同的Widget实例: Widget* widget() {
考虑这个课程:
class Widget { Widget::Widget(); bool initialize(); } Widget具有以下特征: >必须调用initialize()才能完全构造 鉴于此,我在工厂函数中封装创建,它始终返回相同的Widget实例: Widget* widget() { static auto w = new Widget; static auto initialized = false; if (!initialized) { if (!w->initialize()) { return nullptr; } initialized = true; } return w; } widget()的返回类型应该是什么? 特别是,我想以某种方式明确表示返回的Widget的生命周期将超过任何调用者,但不会引用内部实现. >返回原始指针并添加注释,指出“返回的指针指向具有静态存储持续时间的对象,该对象在程序结束前不会被删除”.这很简单,但不能自我记录. 解决方法
我投票支持:
boost::optional<Widget&> widget() { static Widget w; // no reason for this to be a pointer static bool initialized = false; if (!initialized) { if (!w.initialize()) { return boost::none; } initialized = true; } return w; } 它清楚地表明调用者不以任何方式拥有Widget,不必担心调用者删除Widget,并且很清楚调用是否成功. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读