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

C++面經(jīng)之什么是RAII面試問題解析

 更新時(shí)間:2023年06月14日 08:43:06   作者:二進(jìn)制架構(gòu)  
這篇文章主要介紹了C++面經(jīng)之什么是RAII面試問題解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

引言

某日二師兄參加XXX科技公司的C++工程師開發(fā)崗位第13面:

面試官:什么是RAII?

二師兄:RAIIResource Acquisition Is Initialization的縮寫。翻譯成中文是資源獲取即初始化。

面試官:RAII有什么特點(diǎn)和優(yōu)勢?

二師兄:主要的特點(diǎn)是,在對象初始化時(shí)獲取資源,在對象析構(gòu)時(shí)釋放資源。這種技術(shù)可以避免資源邪路或內(nèi)存泄漏,提高程序的健壯性和可維護(hù)性。

面試官:使用RAII可以做哪些事情?

二師兄:主要可以管理動態(tài)分配的內(nèi)存而不需要手動申請和釋放,管理鎖不需要手動加鎖和解鎖,管理句柄不需要手動打開和關(guān)閉。

面試官:你知道有哪些C++標(biāo)準(zhǔn)庫中已經(jīng)存在的類型使用了RAII技術(shù)?

二師兄:有std::shared_ptr、std::unqiue_ptrstd::lock_guardstd::unqiue_lock。

面試官:知道std::lock_guard如何實(shí)現(xiàn)的嗎?

二師兄:應(yīng)該是在構(gòu)造的時(shí)候鎖定,在析構(gòu)的時(shí)候解鎖。

class lock_gurad
{
public:
    lock_gurad(std::mutex& mtx):mtx_(mtx){mtx_.lock(); }
    ~lock_gurad(){mtx_.unlock();}
private:
    std::mutex mtx_;
};

面試官:好的。今天的面試到此結(jié)束,回去等通知吧。

復(fù)盤

讓我們仔細(xì)看一下二師兄的這段代碼,不難發(fā)現(xiàn)存在以下問題:

  • std::mutex mtx_不能直接保存值,因?yàn)?code>mutex沒有拷貝構(gòu)造函數(shù),所以這里需要使用引用。
  • 需要在構(gòu)造函數(shù)前加上explicit關(guān)鍵字,防止編譯器隱式轉(zhuǎn)換
  • lock_gurad不能拷貝(因?yàn)闀卸鄠€(gè)實(shí)例管理一個(gè)互斥鎖,導(dǎo)致不可預(yù)測的行為),所以要?jiǎng)h除拷貝構(gòu)造函數(shù)和拷貝賦值運(yùn)算符。

修復(fù)后的代碼如下:

class lock_guard
{
public:
    explicit lock_guard(std::mutex& mtx) : mtx_(mtx){ mtx_.lock(); }
    ~lock_guard(){ mtx_.unlock(); }
    lock_guard(const lock_guard&) = delete;
    lock_guard& operator=(const lock_guard&) = delete;
private:
    std::mutex&  mtx_;
};

好了,今日份面試到這里就結(jié)束了,更多關(guān)于C++面試的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Qt實(shí)現(xiàn)數(shù)據(jù)進(jìn)行加密、解密的步驟

    Qt實(shí)現(xiàn)數(shù)據(jù)進(jìn)行加密、解密的步驟

    本文主要介紹了Qt實(shí)現(xiàn)數(shù)據(jù)進(jìn)行加密、解密的步驟,包含QCryptographicHash和Qt-AES兩種庫的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • OpenCV提取圖像中圓線上的數(shù)據(jù)具體流程

    OpenCV提取圖像中圓線上的數(shù)據(jù)具體流程

    在對圖像進(jìn)行處理時(shí),經(jīng)常會要提取出圖像中某條直線、圓線或者ROI區(qū)域內(nèi)的感興趣數(shù)據(jù),進(jìn)行重點(diǎn)關(guān)注。本文主要介紹了利用OpenCV獲取圖像中圓線上的數(shù)據(jù),需要的可以參考一下
    2021-11-11
  • 詳解C語言中的符號常量、變量與算術(shù)表達(dá)式

    詳解C語言中的符號常量、變量與算術(shù)表達(dá)式

    這篇文章主要介紹了C語言中的符號常量、變量與算術(shù)表達(dá)式,是C語言入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-11-11
  • C語言的進(jìn)制轉(zhuǎn)換及算法實(shí)現(xiàn)教程

    C語言的進(jìn)制轉(zhuǎn)換及算法實(shí)現(xiàn)教程

    這篇文章主要介紹了C語言的進(jìn)制轉(zhuǎn)換及算法實(shí)現(xiàn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Visual Studio Code 配置C、C++環(huán)境/編譯并運(yùn)行的流程分析

    Visual Studio Code 配置C、C++環(huán)境/編譯并運(yùn)行的流程分析

    這篇文章主要介紹了Visual Studio Code 配置C、C++環(huán)境/編譯并運(yùn)行的流程分析,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • 基于Qt OpenCV的圖像灰度化像素操作詳解

    基于Qt OpenCV的圖像灰度化像素操作詳解

    這篇文章主要為大家詳細(xì)介紹了基于Qt+OpenCV的圖像灰度化像素操作:最大值法、平均法、加權(quán)平均值法,感興趣的小伙伴可以了解一下
    2022-07-07
  • C++設(shè)計(jì)模式中的工廠模式詳細(xì)介紹

    C++設(shè)計(jì)模式中的工廠模式詳細(xì)介紹

    工廠模式,是一種實(shí)例化對象的方式,只要輸入需要實(shí)例化對象的名字,就可以通過工廠對象的相應(yīng)工廠函數(shù)來制造你需要的對象
    2022-09-09
  • C++?ROS與boost:bind()使用詳解

    C++?ROS與boost:bind()使用詳解

    boost::bind是標(biāo)準(zhǔn)庫函數(shù)std::bind1st和std::bind2nd的一種泛化形式,其可以支持函數(shù)對象、函數(shù)、函數(shù)指針、成員函數(shù)指針,并且綁定任意參數(shù)到某個(gè)指定值上或者將輸入?yún)?shù)傳入任意位置,本文重點(diǎn)介紹下C++?ROS與boost:bind(),感興趣的朋友跟隨小編一起看看吧
    2023-01-01
  • C++實(shí)現(xiàn)模擬shell命令行(代碼解析)

    C++實(shí)現(xiàn)模擬shell命令行(代碼解析)

    這篇文章主要介紹了C++實(shí)現(xiàn)模擬shell命令行,本文通過實(shí)例代碼進(jìn)行命令行解析,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • C語言malloc分配問題詳解

    C語言malloc分配問題詳解

    這篇文章主要介紹了c語言 malloc函數(shù)的分配問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-09-09

最新評論