[問題] unique_ptr + pImpl + 建解構子
我所知道的就是 如果沒有把建構子解構子寫在 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
04/23 10:11, 1F
→
04/23 10:12,
6年前
, 2F
04/23 10:12, 2F
→
04/23 12:09,
6年前
, 3F
04/23 12:09, 3F
→
04/23 12:10,
6年前
, 4F
04/23 12:10, 4F
→
04/23 12:13,
6年前
, 5F
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
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章