[問題] 存取calloc()配置strcut物件STL容器成員

看板C_and_CPP作者 (我好弱 又不認真)時間13年前 (2013/01/08 00:47), 編輯推噓0(0018)
留言18則, 3人參與, 最新討論串1/1
請問在struct裡面 如果它的data member想要是一個STL容器ex:map 要怎樣寫呢... 例如 typedef struct T_Data { int a; int b; map<int, int> aMap; }TData; 然後用動態配置的 TData *ptData = calloc(1, sizeof(TData)); 然後想要這樣用 ptData->aMap[1] = 2; 可是compile就掛了 請問想要達到這種每個TData物件 都有自己的 aMap可以操作 要怎樣寫才合法呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 1.162.58.151

01/08 00:48, , 1F
因為這樣map都沒call到它的constructor吧我猜
01/08 00:48, 1F

01/08 00:49, , 2F
不過就不知道怎樣寫比較好...
01/08 00:49, 2F

01/08 00:50, , 3F
new
01/08 00:50, 3F

01/08 00:50, , 4F
有關鍵字可以搜尋嗎... 要new的話... 我沒new過STL物件
01/08 00:50, 4F

01/08 00:51, , 5F
他要有一個data member可以接new出來的東西吧 那個
01/08 00:51, 5F

01/08 00:51, , 6F
member要長什麼樣子呢@@...
01/08 00:51, 6F

01/08 00:52, , 7F
不用 你new T_Data的時候就會幫你呼叫T_Data的default ctor
01/08 00:52, 7F

01/08 00:52, , 8F
compiler預設產生的default ctor就會呼叫aMap的default ctor
01/08 00:52, 8F

01/08 00:54, , 9F
所以不能用calloc去動態配置TData 用new的就可以辦到@@
01/08 00:54, 9F

01/08 00:55, , 10F
你要用malloc之類的也可以 但是你必須用placement new
01/08 00:55, 10F
用new的話是這樣嗎 TData * ptTData = new TData; TData->aMap[1] = 2; ※ 編輯: AnonymousX 來自: 1.162.58.151 (01/08 00:57)

01/08 00:56, , 11F
呼叫物件的ctor來初始化它 不過除非必要 要不然不建議這樣做
01/08 00:56, 11F

01/08 00:57, , 12F
恩... 我向上面那樣寫 在assign那邊會報錯...
01/08 00:57, 12F

01/08 00:58, , 13F
因為你的變數名子叫做ptTData啊=.=
01/08 00:58, 13F

01/08 00:59, , 14F
阿阿 弄錯 是說ptTData->aMap[1] = 2; 這樣不行...
01/08 00:59, 14F

01/08 01:03, , 15F
可以了 字打錯 sorry 非常感謝樓上PkmX前輩!
01/08 01:03, 15F

01/08 11:18, , 16F
如果 T_Data 是 class 你會怎樣寫呢?
01/08 11:18, 16F

01/08 21:58, , 17F
是class的話很自然會用new的...@@
01/08 21:58, 17F

01/08 21:58, , 18F
不過我原本是用C後來想包STL進來才轉到c++就打結了QQ
01/08 21:58, 18F
文章代碼(AID): #1GwlmS2A (C_and_CPP)