《C 遊戲伺服器開發入門到掌握》深入學習C

2021-08-27 21:06:10 字數 2813 閱讀 7598

三個基本法則

40、虛函式遇到構造析構就退化了

41、重新審視 auto

42、左值引用和右值引用(不考慮模板)

45、用 weak_ptr 打破迴圈引用

48、使用智慧型指標需要注意的幾個「坑」

objectptr obj3

(new object(2

));// 會呼叫兩次new()

objectptr obj4 = obj3;

// 拷貝操作非原子操作,比較複雜,尤其是在多執行緒程式設計中

objectptr obj5 = std:

:make_shared(3

);// 保證只會呼叫一次new()

49、lambda 函式
// 作為本地變數

auto local =

(int a,

int b)

local(1

,2);

// 作為引數

template

void

printusefunc

(func func,

int a,

int b)

printusefunc([

](int a,

int b),1

,2);

// 也可將外部引數傳遞進去

int a =1;

int b =2;

// [&a, &b]引用 or [=]全部採用 or [&]全部引用

auto local =

[a, b]()

local()

;// 這一切與lua中的function功能相似

50、概述

51、容器儲存的是什麼

52、容器的通用介面

53、std::array

54、std::verctor

55、std::deque

// 儲存世界聊天內容

using buffer = std:

:vector<

char

>

;using group = std:

:deque

;

56、std::list
// 找到中間元素

auto iterbegin = a.

begin()

;// 初學者方法

for(

int i =

0; i <4;

++i)

++iterbegin;

// 高階一點的方法

std:

:advance

(iterbegin,4)

;auto iter5 = std:

:next

(iterbegin,4)

;// 但最好不要出現這樣的情況,如果頻繁訪問中間元素,而不是插入刪除,可能用別的container會好一些。

// 演算法

b.remove

(1.0f);

// 值等於1.0f的全部刪除

b.remove_if([

](auto v));

// 傳入比較條件,滿足的全部刪除。

b.reverse()

;// 反轉列表

b.sort()

;// 預設以"<"排序。// stl的std::sort(a.begin(), a.end());對於list編譯出錯,所以list自帶sort()方法。

g.sort()

;b.merge

(g);

// 合併兩個排好序的列表。

c.unique()

;// 去重排好序的列表。沒排好序的也能去重,只不過結果不對。1 1 2 2 1 1 3 4 -> 1 2 1 3 4

c.splice

(c.begin()

, b)

;// 在c的某個位置插入整個b。

總結:在使用list和演算法的時候,優先考慮list自身的演算法,更高效。

57、std::forward_list

58、智慧型指標的乙個陷阱

// 單次消耗時間對比(納秒)

int1.00

int*

1.23

sharedptr 1.49

weakptr 14.64

第三方程式:celero::run(argc, argv);

總結:頻繁使用、迴圈遍歷(玩家或怪物列表),不建議使用weak_ptr。

59、std::set

60、std::set(第二部分)

61、std::map

auto finditer = b.at(

10);if

(finditer != std:

:end

(b)/* b.end() */

)else

// 包裝

template

typename map:

(const map &map,

const typename map:

:key_type &key,

const typename map::(

))auto info =

get_default

(b,10);

if(info.

empty()

)else

62、std::unordered set/map

遊戲伺服器開發 準備篇 初識遊戲伺服器開發

近期轉換了工作方向,從web開發走向了遊戲開發。此前的工作中,主要負責web分布式專案的開發,rest服務開發,幷包含一部分im系統的開發。分布式系統框架,資料庫,nosql接觸的比較多,比較雜。而新工作比較單一,主要負責遊戲伺服器的業務開發。使用的也是前輩封裝好的框架。後來發現,原來全公司都使用了...

ACE開發遊戲伺服器

在 win32 平台上最有效率的 io模型,莫過於完成埠了。csdn 上到處都是關於完成埠的問題。在 ace中對 win32 平台的完成埠有著非常好的封裝。ace中前攝式框架的 win32 實現就是使用的完成埠。我們先來看看這個框架有哪些組成部分。ace proactor 前攝器,真怪異的名字。叫非...

c 遊戲伺服器框架

2 muduo是乙個基於 reactor 模式的 c 網路庫 3 boost asio 是乙個非同步的網路框架 官網 第三方教程 4 libevent 官網 5 ace是乙個很成熟的中介軟體產品,為自適應通訊環境,但它過於巨集大,一堆的設計模式,架構是一層又一層,對初學者來說,有點困難。pss開源框...