看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Ubuntu Linux / g++ 4.6 問題(Question): http://ideone.com/f1Ctt 我先用 operator new [] 要了一塊空間給 p 之後想把 p 裏面每個元素都用 kerker 這個物件 initialize 我的想法是透過 copy constructor 把 kerker 複製一份後塞給 p 裏面的空間 這樣似乎會造成 runtime error ? 然後又做了實驗,把 *p = T(kerker); 換成 p = new T(kerker); 這樣就能成功 同樣都是去 call T 的 copy constructor 兩者是差在那邊呢@@? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.247.99
QQ29:直接寫 T *p = new T[3]; 就可以啦 05/31 23:34
xatier:根據網友 adxis 的水球,好像可以用 new (p+i) T(kerker); 05/31 23:38
xatier:研究中... 05/31 23:38
QQ29:http://tinyurl.com/3yaaj4y 你那樣寫 就是他範例的case 3 05/31 23:39
QQ29:沒跑constructor 所以你的string a沒被建構 裡面出了啥差錯 05/31 23:39
QQ29:不得而知 05/31 23:40
QQ29:但是這樣就失去 placement new的意義了~ 05/31 23:41
xatier:Hmmm... 原來如此,我再試試看 >"< 05/31 23:42
QQ29:啊我想錯了~用a大的方式就沒有錯 但是會發生exception原因 05/31 23:44
QQ29:還是滿好奇的.... 05/31 23:44
QQ29:你*p = 是呼叫T的operator = 但你沒寫這optr 所以她在做copy 05/31 23:50
QQ29:的時候 string a = T(kerker).a 壞掉了 05/31 23:51
xatier:了解... 06/01 00:06
loveme00835:http://ppt.cc/DoR9 06/01 01:00
xatier:感謝板主! 好清楚的 faq! 06/01 01:11
loveme00835:see also http://ppt.cc/SRuf or use std::allocator 06/01 01:50