日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

C++ 慣用法之 PIMPL

來源: 責編: 時間:2024-02-01 12:47:26 266觀看
導讀一、背景1.概述PIMPL 是 C++ 中的一個編程技巧,意思為指向?qū)崿F(xiàn)的指針。具體操作是把類的實現(xiàn)細節(jié)放到一個單獨的類中,并用一個指針進行訪問。2.二進制兼容性(1) 概述二進制兼容是指當庫文件升級后所有使用該庫的應用程

一、背景

1.概述

PIMPL 是 C++ 中的一個編程技巧,意思為指向?qū)崿F(xiàn)的指針。具體操作是把類的實現(xiàn)細節(jié)放到一個單獨的類中,并用一個指針進行訪問。6de28資訊網(wǎng)——每日最新資訊28at.com

6de28資訊網(wǎng)——每日最新資訊28at.com

2.二進制兼容性

(1) 概述

二進制兼容是指當庫文件升級后所有使用該庫的應用程序不必重新編譯,其本質(zhì)就是類的內(nèi)存布局不變。使用 pimpl 方法設計類可以實現(xiàn)二進制兼容的目的。6de28資訊網(wǎng)——每日最新資訊28at.com

(2) 類成員更改后的內(nèi)存布局

原始類定義:6de28資訊網(wǎng)——每日最新資訊28at.com

class demoClass{private:  int a;  int b;};

內(nèi)存布局如下:6de28資訊網(wǎng)——每日最新資訊28at.com

6de28資訊網(wǎng)——每日最新資訊28at.com

類更改后的定義:6de28資訊網(wǎng)——每日最新資訊28at.com

class demoClass{private:  char c;  int a;  int b;};

內(nèi)存布局如下:6de28資訊網(wǎng)——每日最新資訊28at.com

6de28資訊網(wǎng)——每日最新資訊28at.com

(3) pimpl 下類的內(nèi)存布局

class demoClass{private:  class demoClassImpl;  demoClassImpl* impl;};class demoClass::demoClassImpl{public:  int a;  int b;};

內(nèi)存布局如下:6de28資訊網(wǎng)——每日最新資訊28at.com

6de28資訊網(wǎng)——每日最新資訊28at.com

如上圖所示,無論類的實現(xiàn)類的數(shù)據(jù)成員如何變化,類的布局始終不變。6de28資訊網(wǎng)——每日最新資訊28at.com

二、pimpl 應用

1.功能實現(xiàn)細節(jié)隱藏

(1) 概述

作為接口的提供者,我們希望接口的使用者不必知道接口實現(xiàn)的更多細節(jié),因為根據(jù)類的私有數(shù)據(jù)成員和方法一般就可以猜測出接口的設計方式。6de28資訊網(wǎng)——每日最新資訊28at.com

(2) 隱藏實現(xiàn)細節(jié)

通過 pimp 方法設計類可以實現(xiàn)隱藏類的私有成員和方法的目的,僅對外暴露公有的接口。6de28資訊網(wǎng)——每日最新資訊28at.com

class demoClass{public:  void func();//對外接口private:  class demoClassImpl;  demoClassImpl* impl;};class demoClass::demoClassImpl{private:  int a;  int b;    void func1();  void func2();public:  void func();};void demoClass::func(){  impl->func();}

2.降低編譯依賴

(1) 概述

在一個常用的頭文件中如果包含了太多其他不必要的頭文件會嚴重降低編譯效率。6de28資訊網(wǎng)——每日最新資訊28at.com

(2) 值類型的成員必須引用其頭文件

值類型的成員因為要分配內(nèi)存大小必須知道其確定的定義,需要包含其頭文件6de28資訊網(wǎng)——每日最新資訊28at.com

#include "A.h"class demoClass{  A a;};

如果僅有類的申明則會出錯:6de28資訊網(wǎng)——每日最新資訊28at.com

class A;class demoClass{  A a;};

6de28資訊網(wǎng)——每日最新資訊28at.com

(3) 指針或者引用類型,僅需要類的申明

class A;class demoClass{  A  func(A a);};

(4) 使用 pimpl 降低編譯依賴

一般庫文件使用者僅需要包含當前庫對應的頭文件即可,不應該再包含其他的頭文件。假設庫的頭文件定義如下:6de28資訊網(wǎng)——每日最新資訊28at.com

#include "A.h"class demoClass{private:  A a;public:  void func();};

此時,若 A 為另外一個公共庫,則庫的使用者需要在項目中配置 A.h 的路徑;若 A 為自定義類,則庫的提供者還需要額外提供 A.h 文件。6de28資訊網(wǎng)——每日最新資訊28at.com

使用 pimpl 方法改進則可以減少編譯依賴,僅在類的實現(xiàn)文件中包含頭文件即可:6de28資訊網(wǎng)——每日最新資訊28at.com

// demoClass.hclass demoClass{public:  void func();//對外接口private:  class demoClassImpl;  demoClassImpl* impl;};// demoClass.cpp#include "A.h"class demoClass::demoClassImpl{private:  A a;public:  void func();};

2.動態(tài)配置功能的實現(xiàn)方法

(1) 概述

使用 pimpl 的方式把類的功能實現(xiàn)用另外一個獨立的類來完成,可以在需要的時候動態(tài)的配置類的實現(xiàn)方法,而保持類的接口不變。6de28資訊網(wǎng)——每日最新資訊28at.com

(2) 代碼示例

公共接口類:6de28資訊網(wǎng)——每日最新資訊28at.com

class demoClassImpl;class demoClass{public:    void func();//對外接口public:    demoClassImpl* impl;};void demoClass::func(){    impl->func();}

功能實現(xiàn)抽象類:6de28資訊網(wǎng)——每日最新資訊28at.com

class demoClassImpl{public:    virtual void func() = 0;};

功能實現(xiàn)派生類:6de28資訊網(wǎng)——每日最新資訊28at.com

class demoClassImpl1 : public demoClassImpl{public:    void func() { cout << "實現(xiàn)方式1" << endl; }};class demoClassImpl2 : public demoClassImpl{public:    void func() { cout << "實現(xiàn)方式2" << endl; }};

功能實現(xiàn)方式的動態(tài)配置:6de28資訊網(wǎng)——每日最新資訊28at.com

demoClass* demo = new demoClass;demoClassImpl1* impl1 = new demoClassImpl1;demo->impl = impl1;demo->func();demoClassImpl2* impl2 = new demoClassImpl2;demo->impl = impl2;demo->func();

6de28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-70407-0.htmlC++ 慣用法之 PIMPL

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 十個React狀態(tài)管理庫推薦:打造高效、可維護的前端應用

下一篇: 探秘C++的移動語義:釋放力量,提升性能

標簽:
  • 熱門焦點
  • 6月安卓手機性能榜:vivo/iQOO霸占旗艦排行榜前三

    2023年上半年已經(jīng)正式過去了,我們也迎來了安兔兔V10版本,在新的驍龍8Gen3和天璣9300發(fā)布之前,性能榜的榜單大體會以驍龍8Gen2和天璣9200+為主,至于那顆3.36GHz的驍龍8Gen2領先
  • 5月安卓手機好評榜:魅族20 Pro奪冠

    性能榜和性價比榜之后,我們來看最后的安卓手機好評榜,數(shù)據(jù)來源安兔兔評測,收集時間2023年5月1日至5月31日,僅限國內(nèi)市場。第一名:魅族20 Pro好評率:97.50%不得不感慨魅族老品牌還
  • 5月iOS設備好評榜:iPhone 14僅排第43?

    來到新的一月,安兔兔的各個榜單又重新匯總了數(shù)據(jù),像安卓陣營的榜單都有著比較大的變動,不過iOS由于設備的更新?lián)Q代并沒有那么快,所以相對來說變化并不大,特別是iOS好評榜,老款設
  • 帥氣純真少年!日本最帥初中生選美冠軍出爐

    日本第一帥哥初一生選美大賽冠軍現(xiàn)已正式出爐,冠軍是來自千葉縣的宗田悠良。日本一直熱衷于各種選美大賽,從&ldquo;最美JK&rdquo;起到&ldquo;最美女星&r
  • Temu起訴SHEIN,跨境電商戰(zhàn)事升級

    來源 | 伯虎財經(jīng)(bohuFN)作者 | 陳平安日前據(jù)外媒報道,拼多多旗下跨境電商平臺Temu正對競爭對手SHEIN提起新訴訟,訴狀稱Shein&ldquo;利用市場支配力量強迫服裝廠商與之簽訂獨家
  • 破圈是B站頭上的緊箍咒

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之每年的暑期檔都少不了瞄準追劇女孩們的古偶劇集,2021年有優(yōu)酷的《山河令》,2022年有愛奇藝的《蒼蘭訣》,今年卻輪到小破站抓住了追
  • 蘋果公司要求三星和LG Display生產(chǎn)「無邊框」OLED iPhone顯示屏

    據(jù) The Elec 報道,蘋果已要求其供應商為未來的 iPhone 型號開發(fā)「無邊框」OLED 顯示面板。蘋果顯然已要求三星和 LG Display 開發(fā)新的 OLED 顯示面
  • iQOO Neo8系列今日官宣:首發(fā)天璣9200+ 全球安卓最強芯!

    在昨日舉行的的聯(lián)發(fā)科新一代旗艦芯片天璣9200+的發(fā)布會上,iQOO官方也正式宣布,全新的iQOO Neo8系列新品將全球首發(fā)搭載這款當前性能最強大的移動平臺
  • 英特爾Xe HPG游戲顯卡:擁有512EU,單風扇版本

    據(jù)10 月 30 日外媒 TheVerge 消息報道,英特爾 Xe HPG Arc Alchemist 的正面實被曝光,不僅擁有 512 EU 版顯卡,還擁有 128EU 的單風扇版本。另外,這款顯卡 PCB
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
国内外成人在线视频| 国产精品电影观看| 欧美在线精品免播放器视频| 欧美在线免费| 免费在线亚洲欧美| 欧美日韩精品欧美日韩精品一 | 一区二区三区自拍| 亚洲国产高清一区二区三区| 99这里只有久久精品视频| 亚洲欧美国内爽妇网| 久久精品一区二区三区中文字幕| 免费国产自线拍一欧美视频| 欧美日韩国产三级| 国产伦一区二区三区色一情| 亚洲电影观看| 亚洲午夜国产成人av电影男同| 久久久成人精品| 欧美国产三级| 国产日韩亚洲欧美综合| 亚洲日本va午夜在线电影| 中文亚洲视频在线| 久久亚洲影音av资源网| 欧美色大人视频| 韩国一区二区三区在线观看| 日韩视频免费观看| 久久久久国产精品www| 欧美三日本三级少妇三2023| 黄色精品在线看| 在线一区二区三区做爰视频网站| 久久久久国产精品一区| 国产精品国产三级国产aⅴ无密码| 精品动漫一区二区| 亚洲免费一区二区| 欧美激情在线免费观看| 国产一区二区三区的电影 | 国产午夜精品一区理论片飘花| 午夜欧美大片免费观看| 久久亚洲一区二区三区四区| 国产精品久久久久久久一区探花| 亚洲国产黄色| 欧美一区二区成人| 欧美日韩一区三区| 在线观看成人一级片| 午夜精彩国产免费不卡不顿大片| 欧美激情按摩| 激情文学一区| 香蕉成人久久| 欧美日韩一区二区三区在线看| 在线观看av一区| 性做久久久久久久免费看| 欧美日韩免费一区| 亚洲国产精品久久91精品| 久久久久高清| 国产欧美日韩亚洲| 亚洲香蕉成视频在线观看 | 欧美日韩精品免费观看视频| 亚洲二区三区四区| 久久九九免费视频| 国产伦精品一区二区三区视频孕妇| 99精品国产福利在线观看免费 | 一区二区免费在线播放| 欧美大片免费观看| 在线播放亚洲一区| 久久国产手机看片| 国产精品永久免费视频| 亚洲无人区一区| 欧美日韩免费观看一区三区| 亚洲欧洲精品一区二区三区不卡 | 美女图片一区二区| 国外成人网址| 久久精品一本| 国产午夜精品久久久久久久| 亚洲在线中文字幕| 欧美亚日韩国产aⅴ精品中极品| 亚洲美女av在线播放| 欧美成年人在线观看| 亚洲国产精品成人| 麻豆国产精品va在线观看不卡| 国语自产精品视频在线看一大j8| 久久国产精品久久久久久| 国产日韩欧美成人| 欧美一区二区日韩| 国产欧美日韩视频一区二区| 欧美一区二区三区精品| 国产三级欧美三级| 久久国产色av| 一区在线影院| 猛干欧美女孩| 亚洲精品极品| 欧美日韩免费网站| 一本一本久久| 欧美性猛交xxxx乱大交退制版| 亚洲私人黄色宅男| 国产精品实拍| 久久电影一区| 在线日韩av永久免费观看| 欧美成人精品激情在线观看| 亚洲人成在线播放| 欧美日韩国产首页| 亚洲免费综合| 国产一区视频网站| 嫩模写真一区二区三区三州| 亚洲欧洲一区二区三区久久| 欧美母乳在线| 亚洲特黄一级片| 国产欧美精品日韩精品| 久久嫩草精品久久久精品| 亚洲国产精品黑人久久久| 欧美日本中文| 亚洲综合电影| 狠狠色狠狠色综合日日91app| 美女91精品| 99国产精品视频免费观看| 国产精品乱码一区二区三区| 欧美一区二区三区另类| 亚洲电影成人| 欧美日韩蜜桃| 性色av一区二区怡红| 在线精品福利| 欧美日韩亚洲91| 欧美在线观看www| 一区免费视频| 欧美三日本三级三级在线播放| 欧美一级片一区| 亚洲国产另类久久精品| 欧美午夜精品理论片a级大开眼界 欧美午夜精品理论片a级按摩 | 在线观看日韩| 欧美四级电影网站| 久久精品午夜| 亚洲国产精品va在线观看黑人| 欧美日韩在线免费| 久久精品中文字幕一区| 亚洲巨乳在线| 夜夜嗨av色一区二区不卡| 国产麻豆午夜三级精品| 美女日韩欧美| 亚洲网站在线看| 在线观看一区| 国产精品美女在线| 免费观看日韩| 午夜精品福利在线| 亚洲第一精品电影| 国产精品久久一区主播| 免费成人网www| 午夜精品美女自拍福到在线| 91久久久久久久久久久久久| 国产精品制服诱惑| 欧美激情91| 久久久99爱| 亚洲亚洲精品在线观看 | 国产精品久久久久久av福利软件| 久久久久久夜| 亚洲午夜精品在线| 亚洲高清在线观看一区| 国产精品自拍三区| 欧美伦理在线观看| 久久久亚洲成人| 亚洲欧美三级伦理| 亚洲美女淫视频| 在线观看国产成人av片| 国产麻豆9l精品三级站| 欧美日本一道本在线视频| 久久嫩草精品久久久精品一| 亚洲图片在区色| 亚洲人成高清| 一区二区三区在线免费播放| 国产精品久久国产精品99gif | 国自产拍偷拍福利精品免费一| 国产精品av久久久久久麻豆网| 欧美国产在线电影| 久久蜜臀精品av| 欧美一区二区三区另类 | 欧美一区二区私人影院日本| 中文亚洲字幕| 亚洲免费高清| 91久久极品少妇xxxxⅹ软件| 精品福利免费观看| 国产亚洲激情视频在线| 国产精品久久久久影院色老大| 欧美精品福利| 免费观看久久久4p| 久久躁日日躁aaaaxxxx| 久久九九99| 性欧美暴力猛交另类hd| 亚洲主播在线观看| 亚洲视屏在线播放| 日韩亚洲不卡在线| 亚洲精品一区久久久久久| 亚洲福利视频一区二区| 伊大人香蕉综合8在线视| 国产综合第一页| 国产亚洲视频在线观看| 国产日韩精品一区二区| 国产嫩草一区二区三区在线观看 | 亚洲国内自拍| 91久久久亚洲精品| 亚洲欧洲在线播放| 亚洲国产午夜| 亚洲黄色精品| 亚洲精品国产系列| 日韩亚洲欧美在线观看| 日韩亚洲欧美一区二区三区| 99爱精品视频| 亚洲图片欧美日产|