Re: [問題] 動態宣告class的array並使用constructor
※ 引述《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
≡≡≡≡║ ╚╝ ║║ ╚╝ ║║║║ ║║ ╞╣║ ║║ ║║ ║≡≡≡≡
≡≡≡≡║ ═╣║ ╥ ║║║║ ║ ║║ ═ ║║ ╚╝ ║║ ║ ║≡≡≡≡
≡高佑麗╚═╩═╝╚═╩═╝╚╝╚═╚═╝╚═══╝╚═══╝╚═╩═╝鄭允慧≡
≡≡≡≡≡趙賢榮≡≡≡金智淑≡≡≡RAINBOW≡≡≡盧 乙≡≡≡吳勝雅≡ψmocki
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.121.221.215
※ 編輯: loveme00835 來自: 140.121.221.215 (05/29 02:54)
推
05/29 15:00, , 1F
05/29 15:00, 1F
→
05/29 15:06, , 2F
05/29 15:06, 2F
推
05/29 16:38, , 3F
05/29 16:38, 3F
討論串 (同標題文章)