[问题] 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