亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

引言

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

面試官:什么是RAII?

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

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

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

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

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

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

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

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

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

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

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

復(fù)盤

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

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

修復(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)文章

  • C++入門淺談之類和對象

    C++入門淺談之類和對象

    C++ 是一門面向?qū)ο蟮木幊陶Z言,理解 C++,首先要理解類(Class)和對象(Object)這兩個概念。下面和小編一起來學(xué)習(xí)吧
    2021-10-10
  • C++設(shè)計模式之工廠模式

    C++設(shè)計模式之工廠模式

    本文是C++設(shè)計模式系列文章的第一篇,主要給大家講述下工廠模式,非常的簡單實用,有需要的小伙伴可以參考下
    2016-05-05
  • java 中ArrayList與LinkedList性能比較

    java 中ArrayList與LinkedList性能比較

    這篇文章主要介紹了java 中ArrayList與LinkedList性能比較的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • C++中const關(guān)鍵字的用法圖文詳解

    C++中const關(guān)鍵字的用法圖文詳解

    在C++中const是一個關(guān)鍵字,用于聲明常量,它可以用于多種情況,包括聲明常量變量、常量指針、以及成員函數(shù)中的常量性,這篇文章主要給大家介紹了關(guān)于C++中const關(guān)鍵字用法的相關(guān)資料,需要的朋友可以參考下
    2024-08-08
  • C/C++中的回調(diào)用法詳細講解

    C/C++中的回調(diào)用法詳細講解

    這篇文章主要介紹了回調(diào)函數(shù)在C/C++中的重要意義及應(yīng)用,回調(diào)函數(shù)通過將函數(shù)作為參數(shù)傳遞,實現(xiàn)了模塊的解耦、靈活性和可擴展性,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-12-12
  • C++ 二維數(shù)組參數(shù)傳遞的實現(xiàn)方法

    C++ 二維數(shù)組參數(shù)傳遞的實現(xiàn)方法

    這篇文章主要介紹了C++ 二維數(shù)組參數(shù)傳遞的實現(xiàn)方法的相關(guān)資料,這里提供三種方法幫助大家實現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-08-08
  • C/C++語言printf命令使用方法

    C/C++語言printf命令使用方法

    在本篇文章里小編給大家分享了關(guān)于C/C++語言printf命令使用方法和步驟,對此有需要的朋友們學(xué)習(xí)下。
    2019-01-01
  • C++超細致講解隊列queue的使用

    C++超細致講解隊列queue的使用

    隊列先進先出,即只能在容器的末尾添加新元素,只能從頭部移除元素,下面這篇文章主要給大家介紹了關(guān)于C++中隊列queue用法的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-05-05
  • 使用C++實現(xiàn)單鏈表的操作與實踐

    使用C++實現(xiàn)單鏈表的操作與實踐

    在程序設(shè)計中,鏈表是一種常見的數(shù)據(jù)結(jié)構(gòu),特別是在動態(tài)數(shù)據(jù)管理、頻繁插入和刪除元素的場景中,鏈表相比于數(shù)組,具有更高的靈活性和高效性,尤其是在需要頻繁修改數(shù)據(jù)結(jié)構(gòu)的應(yīng)用中,本文將詳細介紹如何用C++語言實現(xiàn)一個面向?qū)ο蟮膯捂湵?并展示完整的代碼示例
    2025-02-02
  • Effective C++ 入門學(xué)習(xí)筆記

    Effective C++ 入門學(xué)習(xí)筆記

    這篇文章主要介紹了Effective C++ 入門學(xué)習(xí)筆記,需要的朋友可以參考下
    2023-08-08

最新評論