作者lovejomi (JOMI)
看板C_and_CPP
标题[问题] unique_ptr + pImpl + 建解构子
时间Tue Apr 23 09:39:29 2019
我所知道的就是 如果没有把建构子解构子写在 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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1555983573.A.120.html
1F:推 Jockey66666: Effective Modern C++这本书有提到 04/23 10:11
2F:→ Jockey66666: 手边没书刚刚查了一下应该是条款22 04/23 10:12
3F:→ sarafciel: 错误讯息给得很明确了 unique_ptr有一个预设的 04/23 12:09
4F:→ sarafciel: default_delete模板 当它特化时里面有放static_assert 04/23 12:10
5F:→ sarafciel: 去检验incomplete type并挡掉 跟你的建构和解构的定义 04/23 12:13
6F:→ sarafciel: 有没有看到其实没有关系 04/23 12:14
7F:→ loveme00835: 你好像一直鬼打墙在同样问题上 04/24 18:15