原创 Item 29:爭取異常安全的代碼

異常安全(Exception safety)有點像懷孕(pregnancy)……但是,請把這個想法先控制一會兒。我們還不能真正地議論生育(reproduction),直到我們排除萬難渡過求愛時期 (courtship)。(此段

原创 (Item 13-15): 以對象管理資源

在以前的C++用法中,new是非常常見的用來動態分配內存的方式,但是有new必須有delete,將內存還給系統,否則就會造成內存泄露,這是很危險的一件事情,而以對象管理資源這一思想就能比較好的解決這一問題 通常情況下,對於一個

原创 :Item25:考慮寫出一個不拋出異常的swap函數

本文轉載,原文見:原博 ①如果 std::swap 對於你的類型來說是低效的,請提供一個 swap 成員函數,並確保你的 swap 不會拋出異常。 ②如果你提供一個成員 swap,請同時提供一個調用成員swap的非成員sw

原创 【轉】Template模板筆記

1.模板實例化:C++中的模板是一個函數或者類的藍圖,編寫了不侷限於類型的通用代碼。模板定義本身不參與編譯,而是編譯器根據模板的用戶使用模板時提供的類型參數生成代碼,再進行編譯,這一過程被稱爲模板實例化。用戶提供不同的類型參數,就

原创 筆記:Item 3:Understand decltype .

這個decltype相對於前面的template和auto就更高級一點了,它不僅可以推斷出一個變量的類型,還能推斷出一個表達式的類型。 像這樣: const int i=0; //decltype is const int

原创 :Item 20:以pass-by-reference-to-const替代pass-by-value .

我們經常在函數傳參的時候看到const &這樣的形式,而不是簡單的&或傳值,這裏面肯定是有大大的學問的 如果一個函數是pass-by-value,那麼傳入函數內部時,編譯器會調用copy構造函數構造一份實參的副本,執行函數內部

原创 shared_ptrs利用std::enable_shared_from_this()實現安全管理this指針

智能指針大法好,但是坑兒免不了,不要哭來不要鬧,C艹面前誰敢diao 利用RAII來管理資源自然是高效,但是對於一些比較特殊的類型,還是會有不得不注意的地方,沒錯說的就是std::shared_ptr和this指針的搭配。

原创 Item 18: Use std::unique_ptr for exclusive-ownership resource management.

特別提這一章是因爲自己習慣於使用shared_ptr,而一直忽略unique_ptr的使用,甚至對exclusive-ownership的對象我也是一律採用shared_ptr的方案,而絲毫沒有考慮unique_ptr的感受…所

原创 Item 15: Use constexpr whenever possible.[constexpr 表達式]

學習+使用C++已經有挺長一段時間了,時間越長越是感嘆C++語法之多之深,所以那些簡歷上會寫精通C++的人權當是不懂事了。 constexpr是C++11新加入的一個關鍵字,我一直對它的用法有些困惑,所以平時寫項目的時候從來不

原创 應用單例模式時重複delete pointer導致_CrtIsValidHeapPointer(block)錯誤

前景:在寫Qt桌面應用時,有一個場景是TabWidget管理四個子窗口,每個子窗口都只能有一個實例方便窗口的切換,自然而然就想到要用singleton-pattern,我應用時能正常啓動,但是關閉main window的時候每次

原创 遞歸展開嵌套列表等可迭代對象(list,dict,set...)

展開嵌套列表算法是一個常考點,既是基礎,但是要寫好也不簡單,我見過很多個版本,老手和新手之間的差別簡直堪比雲泥。接下來分享一個高效又巧妙的版本,代碼也很短。 今天在知乎同樣看到了一下這段代碼,是之前flatten的lambda

原创 爬取豆瓣圖書/豆瓣電影系列

DouBan Crawler Series 代碼託管在Github -> DouBanCrawls 完成豆瓣讀書/電影相關的爬取,豆瓣電影爬蟲(DouBanMovie)使用了簡單的多線程極大地提高了爬蟲效率,可與原始版本的讀書爬

原创 QWidget派生類setStyleSheet方法無效問題

最近在做一個基於Qt的桌面應用,準備總結一下開發過程中遇到的一些問題。 我需要創建一個繼承自QWidget的類來設計自己的窗口,使用StyleSheet無疑能方便快捷地配置窗口的一些風格,但是我在應用繼承自基類的setStyl

原创 在connect中使用lambda實現高效的信號/槽關聯

在Qt中,使用QCoreApplication::connect()函數連接信號(signal)與槽(slots)的功能。 以下是connect函數的三種重載形式: static QMetaObject::Connection

原创 Numpy中的矩陣乘法問題

最近參加的一個Program,主題是生物識別,其中的PCA/LDA特徵值提取部分需要大量用到線性代數矩陣論的知識,但是稍不注意numpy中的乘法規則就很容易得到錯誤的結果,最終導致後續結果的崩盤,尤其是較大規模的矩陣,更是很難發