91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

什么是C++程序的Pimpl機制

發布時間:2021-06-18 09:21:14 來源:億速云 閱讀:185 作者:chen 欄目:編程語言

本篇內容主要講解“什么是C++程序的Pimpl機制”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“什么是C++程序的Pimpl機制”吧!

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

機制分析

首先,我們先看看不使用這個機制的一個實現:

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

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

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

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

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

現在,除非我們修改MyClass的公有接口,否則這個頭文件是不會被修改了。然后,我們用這個Impl類的實現來完成主類的細節實現,在主類的構造函數中,我們完成了實現類指針的實例化:

// 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機制其實這是橋接模式的一種變種。我們可以對實現類隨意的進行增刪和修改,而不會導致包含MyClass.h的源代碼重新編譯。當然,這樣做的時間開銷和空間開銷也是有的。

在實踐中,我們常常采用內部類來完成Pimpl機制:

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

到此,相信大家對“什么是C++程序的Pimpl機制”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

本溪| 杨浦区| 烟台市| 江口县| 商洛市| 双峰县| 柳州市| 保德县| 和顺县| 象州县| 东阳市| 宣威市| 内丘县| 辰溪县| 聂荣县| 岳普湖县| 濉溪县| 武隆县| 高邑县| 沈阳市| 枣阳市| 兴宁市| 开平市| 巩义市| 揭阳市| 保康县| 洛阳市| 西乌珠穆沁旗| 呼和浩特市| 烟台市| 和龙市| 沂源县| 灵寿县| 沧源| 保山市| 方城县| 海伦市| 丰都县| 武夷山市| 务川| 星子县|