回覆列表
  • 1 # 使用者5786795977978

    1. 標頭檔案中類宣告包含std::atomic的成員變數,那麼複製構造和複製賦值必須為delete,通常順帶移動構造和移動賦值為default。以上都不是重點,重點是上述函式只能標頭檔案宣告並定義,而不能在cpp中定義。

    2. unique_ptr在std::move的情況下並不轉移deleter,必須{up.release(), up.get_deleter()}顯式右值轉移

    3. 大部分場合用unique ptr,而不是shared ptr

    4. 如果必須自己實現引用計數,記得計數器宣告為std::atomic的,否則多執行緒bug四處開花。

    5. 在效能敏感的場景中,實現一個模板引數指定長度的String類要比std::string好,關鍵是要支援string_view,多數情況下,string_view可以直接從緩衝區強轉構造出來,配合remove_prefix和std::regex,用時一時爽,一直用一直爽。

    6 . string_view不管目標的生命週期,不相容c風格結尾,所以千萬要注意目標生命週期,也不要對string_view用c函式。對了,凡是出現std::string_view& 寫法的,估計還沒習慣這玩意。

    7. 關於move,在STL容器中,基本就是swap,但用了move最好不要再用std::swap,除了程式碼難讀之外,你還要自己把握swap是否足夠強壯而不出錯。

    8. 慎用boost侵入式容器,即使其擁有O(1)的查詢優勢,link mode和侵入式指標也會讓你口吐白沫。不過這裡也推薦給有極致效能要求和自虐傾向的童鞋。

    暫時這麼多吧。。。

  • 中秋節和大豐收的關聯?
  • 47歲張庭穿學生制服幫老公慶生,你怎麼看?