c c 面試總結(2)

2022-08-19 02:45:14 字數 1506 閱讀 8016

4.深拷貝和淺拷貝

(1)什麼時候會用到拷貝函式

乙個物件以值傳遞的方式傳入函式(就是作為入參)

乙個物件以值傳遞的方式從函式返回(就是作為返回值)

乙個物件需要通過另外乙個物件進行初始化

(2)是否應該自定義拷貝函式

如果不自己定義拷貝函式,那麼編譯器會自動生成乙個預設的拷貝函式,這個拷貝函式就會完成物件之間的位拷貝

(3)深拷貝和淺拷貝的理解

當乙個類擁有資源(比如說指標),這個類的物件發生複製過程的時候資源是否重新分配(指標指向一塊記憶體,發生拷貝時是否會在重新申請一塊記憶體),重新分配就是深拷貝,沒有就是淺拷貝,

這個大家可以仔細看看加深理解。

5.重寫cstring(這個也是基本都會考)

class string

;string::string(const char *str = null)// 通用建構函式

if(null==str)

m_data = new char[1];

m_data[0] = '\0';

}else

m_data = new char[strlen(str)+1];

strcpy(m_data,str);

string::string(const string &another)  // 拷貝建構函式

m_data = new char[strlen(anoter.m_data)+1];

strcpy(m_data,another.m_data);

string& string::operater =(const string &rhs)// 賦值函式

if(&rhs==this)

return *this;

delete m_data;

m_data = null;

m_data = new char[strlen(rhs.m_data)+1];

strcpy(m_data,rhs.m_data);

return *this;

string:: ~string() // 析構函式

delete m_data;

m_data = null;

6.執行緒的同步問題

執行緒同步的方法:臨界區,互斥量,訊號量,事件。

臨界區:通過對多執行緒的序列化來訪問公共資源或一段**,速度快,適合控制資料訪問。 

互斥量:為協調共同對乙個共享資源的單獨訪問而設計的。 

訊號量:為控制乙個具有有限數量使用者資源而設計。 

事 件:用來通知執行緒有一些事件已發生,從而啟動後繼任務的開始。

(1)臨界區和互斥量的區別?

互斥量跟臨界區很相似,只有擁有互斥物件的執行緒才具有訪問資源的許可權,由於互斥物件只有乙個,因此就決定了任何情況下此共享資源都不會同時被多個執行緒所訪問。當前佔據資源的執行緒在任務處理完後應將擁有的互斥物件交出,以便其他執行緒在獲得後得以訪問資源。互斥量比臨界區複雜。因為使用互斥不僅僅能夠在同一應用程式不同執行緒中實現資源的安全共享,而且可以在不同應用程式的執行緒之間實現對資源的安全共享。

c c 面試總結(1)

最近在找新的工作,在找工作中遇到很多面試題,大多數讓我很難堪,再次讓我認識到自己的知識的匱乏,上份工作是以應屆生的身份,所有當時進專案組也沒有很多要求,進入專案組後自己還算好學 自己以為 之前也沒有相關的經驗,自己很自信 其實都是盲目的 在上份工作中遇到幾個願意帶我的老員工對我幫助很大 也間接的造成...

C C 求職面試總結 二

1.拷貝構造函式呼叫的三種情形 1 函式傳參時使用物件進行值傳遞 2 函式直接返回某個類物件的值 3 使用乙個物件去初始化另乙個同類的物件,包括兩種方式 部分 class test test t test a t 第一種方式 test b t 第二種方式 2.拷貝建構函式的引數為什麼是引用型別?假設...

面試總結2

1 c c 記憶體洩漏 1 基類的析構函式沒有定義為虛函式 2 缺少拷貝建構函式或過載賦值運算子 兩次釋放相同的記憶體是一種錯誤的做法,同時可能會造成堆的崩潰。按值傳遞會呼叫 拷貝 建構函式,引用傳遞不會呼叫。所以乙個類中有指標變數時,要麼顯示的寫拷貝建構函式和過載操作符函式,要麼禁用拷貝建構函式和...