C++怎么使用指向实现的指针技术获得稳定的ABI

本篇内容介绍了“C++怎么使用指向实现的指针技术获得稳定的ABI”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

站在用户的角度思考问题,与客户深入沟通,找到盐城网站设计与盐城网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站制作、成都网站建设、外贸营销网站建设、企业官网、英文网站、手机端网站、网站推广、主机域名、网页空间、企业邮箱。业务覆盖盐城地区。

I.27: For stable library ABI, consider the Pimpl idiom(考虑使用指向实现的指针技术获得稳定的ABI)

Reason(原因)

私有数据成员参与(内存上的)类布局,私有成员函数参加重载判断,因此改变这些实现细节需要重新编译类的所有用户。一个非多态的接口类管理一个指向实现的指针(Pimpl)可以通过一次间接访问的代价消除修改类实现对类用户的影响。

译者注:形式上很像桥接模式,但目的是为了隐藏而不是多态。

Example(示例)

interface (widget.h)

class widget {    class impl;    std::unique_ptr pimpl;public:    void draw(); // public API that will be forwarded to the implementation    widget(int); // defined in the implementation file    ~widget();   // defined in the implementation file, where impl is a complete type    widget(widget&&) = default;    widget(const widget&) = delete;    widget& operator=(widget&&); // defined in the implementation file    widget& operator=(const widget&) = delete;};

implementation (widget.cpp)

class widget::impl {    int n; // private datapublic:    void draw(const widget& w) { /* ... */ }    impl(int n) : n(n) {}};void widget::draw() { pimpl->draw(*this); }widget::widget(int n) : pimpl{std::make_unique(n)} {}widget::~widget() = default;widget& widget::operator=(widget&&) = default;
    Notes(注意)

See GOTW #100 and cppreference for the trade-offs and additional implementation details associated with this idiom.

关于这个用法平衡考虑和另外的实现细节可以参考GOTW #100和cpprefernce网站。

Enforcement(实施建议)

(Not enforceable) It is difficult to reliably identify where an interface forms part of an ABI.

(无法强制)很难可靠地识别哪里的接口定义会成为ABI的一部分。

译者注:也就无法决定是否需要提示用户。

“C++怎么使用指向实现的指针技术获得稳定的ABI”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!


当前名称:C++怎么使用指向实现的指针技术获得稳定的ABI
标题网址:http://cdiso.cn/article/ghgcdi.html

其他资讯