[問題] unique_ptr + pImpl + 建解構子

看板C_and_CPP (C/C++)作者 (JOMI)時間6年前 (2019/04/23 09:39), 編輯推噓1(106)
留言7則, 3人參與, 6年前最新討論串1/1
我所知道的就是 如果沒有把建構子解構子寫在 class外定義,compile會說 incomplete type 噴error 但我沒有很 明確的 可以說出為什麼 https://wandbox.org/permlink/CrPMjxcQmHmc10z0 vs https://wandbox.org/permlink/IXggjec3DzkQJlCk 上面的可以過。我只能用結果論推斷 include 在main 後 剛好他也看到了FooImpl的完整 size(雖然再後面才定義,為什麼沒噴eror??) “好像”是因為這樣才可以過. 另一個則 是 main include Foo.h 的時候還沒看到 FooImpl所以建構解構 產生的程式碼會需要com plete type 所以出問題,但如果這樣講 unique_ptr解構子會有具體呼叫delete ptr的動 作的我可以接受,建構子呢? new是caller new, 裡面應該只是做pointer的assign, 不 該出問題呀 ,但經過實驗 若建構子寫在class 內 也是會壞,為什麼呢 以上可否給我一些更具體的概念? 另一個問題是 我試圖用shared_ptr看有沒有這類問題,曾經看過網路上說也會遇到 , 但我做不出來, 再想是不是跟實作有關,我試圖跳進我的shared_ptr header....奇怪我找不到解構子 [1 ], 讓我不知怎麼理解...沒有解構子怎麼讓refcount --? 也許都包在control block那 物件但沒有深究,但這樣就能避免我一開始遇到的問題嗎?還是剛好實作是這樣 也許vc 就不一樣@@ 以上 想跟各位討論釐清 謝謝 [1] https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/bits/sh ared_ptr.h -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 27.52.94.45 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1555983573.A.120.html

04/23 10:11, 6年前 , 1F
Effective Modern C++這本書有提到
04/23 10:11, 1F

04/23 10:12, 6年前 , 2F
手邊沒書剛剛查了一下應該是條款22
04/23 10:12, 2F

04/23 12:09, 6年前 , 3F
錯誤訊息給得很明確了 unique_ptr有一個預設的
04/23 12:09, 3F

04/23 12:10, 6年前 , 4F
default_delete模板 當它特化時裡面有放static_assert
04/23 12:10, 4F

04/23 12:13, 6年前 , 5F
去檢驗incomplete type並擋掉 跟你的建構和解構的定義
04/23 12:13, 5F

04/23 12:14, 6年前 , 6F
有沒有看到其實沒有關係
04/23 12:14, 6F

04/24 18:15, 6年前 , 7F
你好像一直鬼打牆在同樣問題上
04/24 18:15, 7F
文章代碼(AID): #1SlcpL4W (C_and_CPP)
文章代碼(AID): #1SlcpL4W (C_and_CPP)