Re: [問題] 動態宣告class的array並使用constructor

看板C_and_CPP作者 (高髮箍)時間11年前 (2013/05/29 02:49), 編輯推噓2(201)
留言3則, 3人參與, 最新討論串3/3 (看更多)
※ 引述《musicJD (J.D.)》之銘言: 除了 placement new 其他我都記不起來, 所以這邊推薦你用 std::allocator<T> C++物件 = 在已配置好的記憶體之上建構的類別實體 ========================================================== struct foo { foo() = delete; // forbidden default ctor foo(const foo&) = delete; // forbidden copy ctor foo(int i){ std::cout << "ctor, i = " << i << std::endl; } ~foo() { std::cout << "dtor" << std::endl; } }; using Alloc = std::allocator<foo>; Alloc alloc; Alloc::size_type n = 7; foo* foos = alloc.allocate(n); // 配置記憶體 // i = 0 to 6 for(decltype(n) i = 0; i != n; ++i) // 建構元素 alloc.construct(foos + i, (int)i); // i = 7 down to 1 for(auto i = n; 0 < i; --i) // 解構元素 alloc.destroy(foos + i - 1); alloc.deallocate(foos, n); // 歸還記憶體 ========================================================== 1. std::allocator<T> 物件可以當作跟 char 一樣小不用管它. 2. 我們通常不會拿 new/delete 來配置內建型別的動態陣列, 因為那就跟 用 malloc 一樣笨拙. 3. 現代的 C++ programer 會儘量將 new 用 make_XXX 之類的函式包裝起 來, 用 RAII 機制來管理記憶體, 所以也鮮少出現 delete. 4. 如果真要自己來, 使用 allocator. 寫出專屬配置器來解決速度等問題 (到時候你會知道 deallocate 第二個參數的用途) 5. 承上, 完成客製化配置器之後再參考 std::vector類別模板的第二個型 別引數: Alloc. -- ╔═══╗╔═══╗ ╔═╗═╗╔═══╗╔═══╗╔╦═╦╗ 金栽經║ ╔╗ ║║ ╔╗ ║╔╗║ ║ ║║ ═ ║║ ╔╗ ║║║ ║║RAINNOUS ≡≡║ ╚╝ ║║ ╚╝ ║║║║ ║║ ╞╣║ ║║ ║║ ║ ═╣║ ╥ ║║║║ ║ ║║ ═ ║║ ╚╝ ║║ ║ ║ 高佑麗╚═╩═╝╚═╩═╝╚╝╚═╚═╝╚═══╝╚═══╝╚═╩═╝鄭允慧 趙賢榮金智淑盧 乙吳勝雅ψmocki -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.121.221.215 ※ 編輯: loveme00835 來自: 140.121.221.215 (05/29 02:54)

05/29 15:00, , 1F
請問這有用 ptt c++程式碼 自動上色程式嗎?
05/29 15:00, 1F

05/29 15:06, , 2F
沒有 0_0
05/29 15:06, 2F

05/29 16:38, , 3F
請問這個 theme 哪裡可以下載(大誤
05/29 16:38, 3F
文章代碼(AID): #1HfFml-k (C_and_CPP)
文章代碼(AID): #1HfFml-k (C_and_CPP)