溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C++怎么使用指向?qū)崿F(xiàn)的指針技術(shù)獲得穩(wěn)定的ABI

發(fā)布時(shí)間:2021-11-26 13:59:43 來(lái)源:億速云 閱讀:146 作者:iii 欄目:大數(shù)據(jù)

本篇內(nèi)容介紹了“C++怎么使用指向?qū)崿F(xiàn)的指針技術(shù)獲得穩(wěn)定的ABI”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

I.27: For stable library ABI, consider the Pimpl idiom(考慮使用指向?qū)崿F(xiàn)的指針技術(shù)獲得穩(wěn)定的ABI)

Reason(原因)

私有數(shù)據(jù)成員參與(內(nèi)存上的)類(lèi)布局,私有成員函數(shù)參加重載判斷,因此改變這些實(shí)現(xiàn)細(xì)節(jié)需要重新編譯類(lèi)的所有用戶。一個(gè)非多態(tài)的接口類(lèi)管理一個(gè)指向?qū)崿F(xiàn)的指針(Pimpl)可以通過(guò)一次間接訪問(wèn)的代價(jià)消除修改類(lèi)實(shí)現(xiàn)對(duì)類(lèi)用戶的影響。

譯者注:形式上很像橋接模式,但目的是為了隱藏而不是多態(tài)。

Example(示例)

interface (widget.h)

class widget {    class impl;    std::unique_ptr<impl> 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<impl>(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.

關(guān)于這個(gè)用法平衡考慮和另外的實(shí)現(xiàn)細(xì)節(jié)可以參考GOTW #100和cpprefernce網(wǎng)站。

Enforcement(實(shí)施建議)

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

(無(wú)法強(qiáng)制)很難可靠地識(shí)別哪里的接口定義會(huì)成為ABI的一部分。

譯者注:也就無(wú)法決定是否需要提示用戶。

“C++怎么使用指向?qū)崿F(xiàn)的指針技術(shù)獲得穩(wěn)定的ABI”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

c++
AI