Way to C++: 6. Exception Safe
前言 考慮以下函數: int Calculate(int n) { int *arr1 = new int[n]; int *arr2 = new int[n]; delete[] arr1; delete[] arr2; return n+1; } 看起來很好,在一開始 new 的陣列在離開函數時都釋放掉了。 但是其實會有問題的:
Series
簡單介紹從 C++ 到 C++11 之間需要知道的重要事情。
前言 考慮以下函數: int Calculate(int n) { int *arr1 = new int[n]; int *arr2 = new int[n]; delete[] arr1; delete[] arr2; return n+1; } 看起來很好,在一開始 new 的陣列在離開函數時都釋放掉了。 但是其實會有問題的:
前言 假如有一個函數,可以吃下 Int 和 Char 的 l-value 和 r-value 作為參數 void foo(int&& a) { printf("R-Int: %d\n", a); } void foo(char&& c) { printf("R-Char: %c\n", c); } void foo(const int& a) { p
上一篇 目標: 自動關閉檔案 現在來想一想,怎麼做到自動關閉檔案,以 FILE* 為基礎。這篇有一些假設性的想法,主要是熟悉更多語法。 std::unique_ptr unique_ptr 就有提供自定刪除子,所以我們可以這樣寫: std::unique_ptr<FILE*> fp(fopen(filename), [](FILE* fp){ if (fp == NULL) return;
前言 上一篇 在一個 class 裡面,有一個 raw pointer 還好,假如有兩個 raw pointer (都是要 new 的那種)呢? class A { public: A() { // ... b = new int; c = new int; // ... } // ...
上一篇 在只有 copy 行為的情況下,會有不少的效能問題,例如一個最常見的用法: std::vector<int> getPrimes(int n); // return p\_1, ..., p\_n primes auto primes = getPrimes(100000); // copy?? 在只有 copy 語意的情況下, 第二行會需要複製大量的陣列元素,可是這是不太需要的。 所以
前言 這是這幾天的c++學習歷程的的整理,主要在於如何理解 c++11 的資源管理。 這是極為重要的,在 c ,資源的釋放都需要小心翼翼地寫: Obj ReadObjFromFile(const char* filename) { FILE* fp = fopen(filename, "r"); //簡化,沒有判斷 fopen 是否成功 Obj obj = ReadObjF