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

作者: lovejomi (JOMI)   2019-04-23 09:39:29
我所知道的就是 如果沒有把建構子解構子寫在 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
作者: Jockey66666 (往事已成追憶)   2019-04-23 10:11:00
Effective Modern C++這本書有提到手邊沒書剛剛查了一下應該是條款22
作者: sarafciel (Cattuz)   2019-04-23 12:09:00
錯誤訊息給得很明確了 unique_ptr有一個預設的default_delete模板 當它特化時裡面有放static_assert去檢驗incomplete type並擋掉 跟你的建構和解構的定義有沒有看到其實沒有關係
作者: loveme00835 (髮箍)   2019-04-24 18:15:00
你好像一直鬼打牆在同樣問題上

Links booklink

Contact Us: admin [ a t ] ucptt.com