欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

C++程序的Pimpl機(jī)制怎么實(shí)現(xiàn)-創(chuàng)新互聯(lián)

今天小編給大家分享一下C++程序的Pimpl機(jī)制怎么實(shí)現(xiàn)的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

為武昌等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及武昌網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為網(wǎng)站設(shè)計(jì)、做網(wǎng)站、武昌網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!

Pimpl機(jī)制是Private Implementation的縮寫,我們常常聽到諸如“不要改動(dòng)你的公有接口”這樣的建議,所以我們一般都會(huì)修改私有接口,但是這會(huì)導(dǎo)致包含該頭文件的所有源文件都要重新編譯,這會(huì)是個(gè)麻煩事兒。Pimpl機(jī)制,顧名思義,將實(shí)現(xiàn)私有化,力圖使得頭文件對(duì)改變不透明。

機(jī)制分析

首先,我們先看看不使用這個(gè)機(jī)制的一個(gè)實(shí)現(xiàn):

// MyBase.h  class MyBase {  public:  int foo();  };  // MyDerived.h  #include "MyBase.h"  class MyDerived : public MyBase {  public:  int bar();  };

假設(shè)你現(xiàn)在希望在MyBase.h中加入一個(gè)新的private和protected成員函數(shù),那么MyDerived和所有包含MyBase.h的源文件都需要重新編譯。在一個(gè)大工程中,這樣的修改可能導(dǎo)致重新編譯時(shí)間的激增。你可以使用Doxygen或者SciTools看看頭文件依賴。

一般來說,不在頭文件中包含頭文件是一個(gè)比較好的習(xí)慣,但是這也不能完全消除修改MyBase.h帶來的重新編譯代價(jià)。有沒有一個(gè)機(jī)制可以使得對(duì)私有接口做修改時(shí)我們可以減小重新編譯的代價(jià)。

在Pimpl機(jī)制中,我們使用前置聲明一個(gè)Impl類,并將這個(gè)類的一個(gè)指針實(shí)例放入主類中,如下:

// MyClass.h  class MyClassImpl; // forward declaration  class MyClass {  public:  MyClass();  ~MyClass();  int foo();  private:  MyClassImpl *m_pImpl;  };

現(xiàn)在,除非我們修改MyClass的公有接口,否則這個(gè)頭文件是不會(huì)被修改了。然后,我們用這個(gè)Impl類的實(shí)現(xiàn)來完成主類的細(xì)節(jié)實(shí)現(xiàn),在主類的構(gòu)造函數(shù)中,我們完成了實(shí)現(xiàn)類指針的實(shí)例化:

// MyClass.cpp  class MyClassImpl {  public:  int foo() {  return bar();  }  int bar() { return var++; }  int var;  };  MyClass::MyClass() : m_pImpl(new MyClassImpl){}  MyClass::~MyClass()  {  try {  delete m_pImpl;  }  catch (...) {}  }  int MyClass::foo(){ return m_pImpl->foo(); }

Pimpl機(jī)制其實(shí)這是橋接模式的一種變種。我們可以對(duì)實(shí)現(xiàn)類隨意的進(jìn)行增刪和修改,而不會(huì)導(dǎo)致包含MyClass.h的源代碼重新編譯。當(dāng)然,這樣做的時(shí)間開銷和空間開銷也是有的。

在實(shí)踐中,我們常常采用內(nèi)部類來完成Pimpl機(jī)制:

// header  class fruit  {  public:   private:  class impl;  impl* pimpl_;  }   // implementation  class fruit::impl  {   };   fruit::fruit()  {  pimpl_ = new impl();  }

以上就是“C++程序的Pimpl機(jī)制怎么實(shí)現(xiàn)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

標(biāo)題名稱:C++程序的Pimpl機(jī)制怎么實(shí)現(xiàn)-創(chuàng)新互聯(lián)
鏈接分享:http://aaarwkj.com/article40/pggeo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)微信公眾號(hào)、Google自適應(yīng)網(wǎng)站、云服務(wù)器、外貿(mào)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)
中文字幕亚洲欧美日韩高清| 国产精品亚洲二区三区| 美女口爆吞精一区二区| 99久久精品费精品国产风间由美| 高清欧美大片免费观看| 日韩av中文一区二区| 99热这里只有精品网址| 日本国产一区二区三区在线| 人妻勾引中文字幕在线视频| 很色很污无遮挡的网色污| 97乱碰视频在线观看| 97热久久精品中文字幕一区| 一区二区三区艳情播放| 午夜免费视频观看在线| 99久久免费热在线观看| 精品亚洲国产成人av| 亚洲欧美中文日韩一区| 欧美日韩国产另类一区二区| 精品少妇人妻一区二区三区| 蜜桃视频在线观看91| 亚洲欧洲日产国码一区| 亚洲禁看av一区不卡| 久久精品国产亚洲av麻豆她| 五月婷婷丁香综合中文字幕| 91免费在线观看国产精品| 国产综合一区在线观看97| 91欧美日韩在线观看视频| 在线日韩观看免费av| 少妇高潮试看二十分钟| 视频一区中文字幕在线| 欧美黄片在线免费观看视频| 精品人妻中文字幕在线| 亚洲成人自拍在线视频| 99久久精彩免费视频| 亚洲国产综合亚洲综合国产| 久久久久久亚洲精品少妇| 中文字幕在线一区国产精品| 国产av蜜臀一区二区三区| 日本一区欧美二区精品| 午夜视频在线播放一区二区三区 | 极品人妻视频中文字幕|