欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++中Pimpl的慣用法詳解

 更新時(shí)間:2023年09月07日 10:48:45   作者:繁星意未平  
Pimpl(Pointer?to?Implementation)是一種常見的?C++?設(shè)計(jì)模式,用于隱藏類的實(shí)現(xiàn)細(xì)節(jié),本文將通過一個(gè)較為復(fù)雜的例子,展示如何使用智能指針來實(shí)現(xiàn)?Pimpl?慣用法,需要的可以參考下

介紹

Pimpl(Pointer to Implementation)是一種常見的 C++ 設(shè)計(jì)模式,用于隱藏類的實(shí)現(xiàn)細(xì)節(jié),從而減少編譯依賴和提高編譯速度。本文將通過一個(gè)較為復(fù)雜的例子,展示如何使用智能指針(如 std::unique_ptr)來實(shí)現(xiàn) Pimpl 慣用法。

什么是 Pimpl 慣用法

Pimpl 是 “Pointer to Implementation” 的縮寫,這個(gè)模式可以幫助我們:

  • 將接口和實(shí)現(xiàn)分離
  • 減少頭文件中的依賴
  • 加速編譯

基本實(shí)現(xiàn)

基本的 Pimpl 實(shí)現(xiàn)需要一個(gè)前置聲明的內(nèi)部類和一個(gè)指向該內(nèi)部類的指針。在這里,我們使用 std::unique_ptr 來管理這個(gè)內(nèi)部類的實(shí)例。

MyClass.h

#include <memory>
class MyClassImpl; // 前置聲明
class MyClass {
public:
    MyClass();
    ~MyClass();
    void DoSomething();
private:
    std::unique_ptr<MyClassImpl> pimpl;
};

MyClass.cpp

#include "MyClass.h"
class MyClassImpl {
public:
    void DoSomething() {
        // 實(shí)現(xiàn)細(xì)節(jié)
    }
};
MyClass::MyClass() : pimpl(std::make_unique<MyClassImpl>()) {}
MyClass::~MyClass() = default;
void MyClass::DoSomething() {
    pimpl->DoSomething();
}

示例

假設(shè)我們有一個(gè) Car 類,它有多個(gè)組件,如 Engine 和 Wheel。

Car.h

#include <memory>
class CarImpl;
class Car {
public:
    Car();
    ~Car();
    void Start();
    void Stop();
private:
    std::unique_ptr<CarImpl> pimpl;
};

Car.cpp

#include "Car.h"
#include "Engine.h"
#include "Wheel.h"
class CarImpl {
public:
    Engine engine;
    Wheel wheel[4];
    void Start() {
        engine.Start();
        // 其他邏輯
    }
    void Stop() {
        engine.Stop();
        // 其他邏輯
    }
};
Car::Car() : pimpl(std::make_unique<CarImpl>()) {}
Car::~Car() = default;
void Car::Start() {
    pimpl->Start();
}
void Car::Stop() {
    pimpl->Stop();
}

在這個(gè)例子中,Car 的用戶只需要包含 Car.h,而不需要知道 Engine 和 Wheel 的存在。這樣就降低了編譯依賴并提高了編譯速度。

總結(jié)

通過使用 Pimpl 慣用法和智能指針,我們能更有效地隱藏實(shí)現(xiàn)細(xì)節(jié),提高編譯速度,并使代碼更易于維護(hù)。

到此這篇關(guān)于C++中Pimpl的慣用法詳解的文章就介紹到這了,更多相關(guān)C++ Pimpl內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言volatile關(guān)鍵字的作用與示例

    C語言volatile關(guān)鍵字的作用與示例

    這篇文章主要介紹了C語言volatile關(guān)鍵字的作用,volatile提醒編譯器它后面所定義的變量隨時(shí)都有可能改變,因此編譯后的程序每次需要存儲或讀取這個(gè)變量的時(shí)候,都會直接從變量地址中讀取數(shù)據(jù)
    2023-04-04
  • C++ 大根堆排序?qū)W習(xí)筆記

    C++ 大根堆排序?qū)W習(xí)筆記

    這篇文章主要為大家介紹了C++ 大根堆排序的學(xué)習(xí)教程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • c++ vector(向量)使用方法詳解(順序訪問vector的多種方式)

    c++ vector(向量)使用方法詳解(順序訪問vector的多種方式)

    vector是向量類型,它可以容納許多類型的數(shù)據(jù),如若干個(gè)整數(shù),所以稱其為容器,本文介紹一下使用方法
    2013-12-12
  • C++空類默認(rèn)函數(shù)詳細(xì)解析

    C++空類默認(rèn)函數(shù)詳細(xì)解析

    如果你只是聲明一個(gè)空類,不做任何事情的話,編譯器會自動為你生成一個(gè)默認(rèn)構(gòu)造函數(shù)、一個(gè)拷貝默認(rèn)構(gòu)造函數(shù)、一個(gè)默認(rèn)拷貝賦值操作符和一個(gè)默認(rèn)析構(gòu)函數(shù)
    2013-10-10
  • Qt音視頻功能實(shí)現(xiàn)方法詳解

    Qt音視頻功能實(shí)現(xiàn)方法詳解

    音視頻應(yīng)用往往需要大量的計(jì)算資源,尤其是在處理高分辨率、高碼率的音視頻數(shù)據(jù)時(shí),這篇文章主要給大家介紹了關(guān)于Qt音視頻功能實(shí)現(xiàn)方法的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-09-09
  • C++ win系統(tǒng)如何用MinGW編譯Boost庫

    C++ win系統(tǒng)如何用MinGW編譯Boost庫

    這篇文章主要介紹了C++ win系統(tǒng)如何用MinGW編譯Boost庫問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • C++實(shí)現(xiàn)xml解析器示例詳解

    C++實(shí)現(xiàn)xml解析器示例詳解

    這篇文章主要為大家介紹了C++實(shí)現(xiàn)xml解析器示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • VisualStudio2019構(gòu)建C/C++靜態(tài)庫和動態(tài)庫dll的問題 附源碼

    VisualStudio2019構(gòu)建C/C++靜態(tài)庫和動態(tài)庫dll的問題 附源碼

    這篇文章主要介紹了VisualStudio2019構(gòu)建C/C++靜態(tài)庫和動態(tài)庫(dll)(文末附源碼),本文通過實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • C語言菜鳥基礎(chǔ)教程之自定義函數(shù)

    C語言菜鳥基礎(chǔ)教程之自定義函數(shù)

    自定義函數(shù): 必須直接或間接在main中調(diào)用,否則該自定義函數(shù)不會被執(zhí)行。 返回值類型 函數(shù)名(參數(shù)類型 參數(shù)名,參數(shù)類型 參數(shù)名...)
    2017-10-10
  • C語言中dlopen和dlsym的使用方式詳解

    C語言中dlopen和dlsym的使用方式詳解

    這篇文章主要為大家詳細(xì)介紹了C語言中dlopen和dlsym的使用方式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03

最新評論