[問題] unique_ptr + pimpl 建構子解構子
看了一些文章“大概“知道pimpl+uniqueptr為什麼要把解構子宣告跟定義要分開
因為沒分開 compiler會gen code然後用到 deleter 間接需要 看到complete type
於是就做了一些實驗,然後就發現有些無法理解的地方
https://wandbox.org/permlink/QRaV5jfUA5wKgE4c
1. 這邊故意讓建構子定義不分開,就編譯不過. 不知道為什麼會去碰到deleter 我建構
子也沒刻意去new Foo
https://wandbox.org/permlink/GZwtpA8GUuilcGXP
vs
https://wandbox.org/permlink/DLCA2r2aXsg3MJ3f
都是把main用到Bar b; 遮掉 差異在 Bar.h內
~Bar() = default; vs ~Bar() {}
原本以為這兩個是幾乎等價的寫法 但似乎還是有差距
2. 但我不理解為什麼一個build的過一個不行?
最後又好奇的做一個實驗
基於以下會build error
https://ideone.com/vVQAbv
我試著把 class Foo{}; 定義在 Bar::Bar(){} and ~Bar(){} 下面
https://wandbox.org/permlink/vkPvz0rcMblhC8O9
竟然也build過了!?
3. 為什麼這樣不會說undecalre error. 其實寫code常常會遇到類似這種問題, 明明覺得
應該會build failed(因為宣告順序問題)
但莫名其妙沒error, 一時之間找不到例子, 有些情況發生在template, 但似乎有個"t
wo phase name lookup", 但這邊又不是template?
4. 也許都不用管太多, 是不是最正規的寫法就是 class內有unique_ptr 好習慣就是 建
構解構定義在class外,
但總覺得寫出 Bar::~Bar() = default; 一定會被問說怎麼不放在class裡面 或是直
接刪除不寫.
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 39.9.226.34
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1537935000.A.F87.html
→
09/26 13:36,
7年前
, 1F
09/26 13:36, 1F
→
09/26 15:02,
7年前
, 2F
09/26 15:02, 2F
→
09/26 23:45,
7年前
, 3F
09/26 23:45, 3F
→
09/26 23:46,
7年前
, 4F
09/26 23:46, 4F
→
09/26 23:47,
7年前
, 5F
09/26 23:47, 5F
→
09/27 00:00,
7年前
, 6F
09/27 00:00, 6F
→
09/27 09:11,
7年前
, 7F
09/27 09:11, 7F
→
09/27 13:26,
7年前
, 8F
09/27 13:26, 8F
→
09/27 17:11,
7年前
, 9F
09/27 17:11, 9F
→
09/27 17:31,
7年前
, 10F
09/27 17:31, 10F
→
09/27 17:31,
7年前
, 11F
09/27 17:31, 11F
推
09/27 20:00,
7年前
, 12F
09/27 20:00, 12F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章