作者loveme00835 (高髮箍)
看板C_and_CPP
標題Re: [問題] 動態宣告class的array並使用constructor
時間Wed May 29 02:49:15 2013
※ 引述《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)
推 damody:請問這有用 ptt c++程式碼 自動上色程式嗎? 05/29 15:00
→ loveme00835:沒有 0_0 05/29 15:06
推 hilorrk:請問這個 theme 哪裡可以下載(大誤 05/29 16:38