- 拷貝構造函數通常用于
當用類的一個對象去初始化該類的另一個對象(或引用)時系統自動調用拷貝構造函數實現拷貝賦值
若函數的形參為類對象,調用函數時,實參賦值給形參,系統自動調用拷貝構造函數
當函數的返回值是類對象時,系統自動調用拷貝構造函數
- 必須使用的情況
如果在類中沒有定義拷貝構造函數,編譯器會自行定義一個。如果類帶有指針變量,并有動態內存分配,則它必須有一個拷貝構造函數
- 必須使用的情況
Line::Line(const Line &obj){ // &obj是對象line的一個引用,用這個對象的引用來初始化另一個對象
cout << "調用拷貝構造函數,并為指針ptr分配內存" << endl;
ptr = new int;
*ptr = *obj.ptr; // 拷貝值
}
- 防止默認拷貝的發生 私有化
4.一邊遍歷一邊刪除vector
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v;
for(int i = 0; i < 10; i++){
v.push_back(i);
}
auto it = v.begin();
while(it != v.end()){
if(*it == 1){
it = v.erase(it);
}
else it++;
}
for(int i = 0; i < v.size(); i++){
cout << v[i] << endl;
}
return 0;
}
- 單例模式的實現
構造函數私有化 加一個公有函數 getinstance 加鎖
- 單例模式的實現
- vector 隨機訪問時間復雜度 O(1) 插入刪除 O(n)
list 隨機訪問時間復雜度 O(n) 插入刪除 O(1)
- vector 隨機訪問時間復雜度 O(1) 插入刪除 O(n)
- 哈希表的原理
其基本原理是:使用一個下標范圍比較大的數組來存儲元素。可以設計一個函數(哈希函數,也叫散列函數),使得每個元素的關鍵字都與一個函數值(即數組下標,hash值)相對應,于是用這個數組單元來存儲這個元素;也可以簡單的理解為,按照關鍵字為每一個元素“分類”,然后將這個元素存儲在相應“類”所對應的地方,稱為桶。
但是,這不能夠保證每個元素的關鍵字與函數值是一一對應的,因此極有可能出現對不不同的元素,卻計算出相同的函數值,這樣就產生了“沖突”。換句話說,就是把不同的元素分在了相同的“類”中。總的來說,“直接定址”和“解決沖突”是哈希表的兩大特點
- 哈希表的原理
- 多線程下,信號槽分別在什么線程中執行,如何控制
可以通過connect的第五個參數進行控制信號槽執行時所在的線程
connect有幾種連接方式,直接連接和隊列連接、自動連接
直接連接:信號槽在信號發出者所在的線程中執行
隊列連接:信號在信號發出者所在的線程中執行,槽函數在信號接收者所在的線程中執行
自動連接:多線程時為隊列連接函數,單線程時為直接連接函數
- 運行某些耗時操作如果界面程序很卡 ,你會怎么優化
數據庫相關的工作、寫磁盤,網絡連接
- 運行某些耗時操作如果界面程序很卡 ,你會怎么優化
- qt哪幾種創建線程的方式
繼承QThread run
繼承object MoveThread
- qt哪幾種創建線程的方式
- 線程同步的方式
互斥鎖 條件變量 讀寫鎖 信號量
- 線程同步的方式
12.線程間共享的資源有
共享的資源有
a. 堆 由于堆是在進程空間中開辟出來的,所以它是理所當然地被共享的;因此new出來的都是共享的(16位平臺上分全局堆和局部堆,局部堆是獨享的)
b. 全局變量 它是與具體某一函數無關的,所以也與特定線程無關;因此也是共享的
c. 靜態變量 雖然對于局部變量來說,它在代碼中是“放”在某一函數中的,但是其存放位置和全局變量一樣,存于堆中開辟的.bss和.data段,是共享的
d. 文件等公用資源 這個是共享的,使用這些公共資源的線程必須同步。Win32 提供了幾種同步資源的方式,包括信號、臨界區、事件和互斥體。
獨享的資源有
a. 棧 棧是獨享的
b. 寄存器