为什么shared_ptr可以构造不完整的类型? 而unique_ptr不可以?该怎么解决
为什么shared_ptr可以构造不完整的类型? 而unique_ptr不可以?下面这一小段程序是编译不过去的,C/C++ code#
为什么shared_ptr可以构造不完整的类型? 而unique_ptr不可以?
下面这一小段程序是编译不过去的,
C/C++ code#include<memory>using namespace std;struct s;struct base{ //std::unique_ptr<s> ps;//编译不过 std::shared_ptr<s> ps;};int main(){ base b; return 0;}
因为类型s没有被完整的定义,base b对象的析构函数里面unique_ptr无法delete s指针,因为s的析构函数不存在。
但是如果我改成shared_ptr就能编译过去。很奇怪的是,既然s的定义还没有出现,那么share_ptr的析构函数如何知道去删除一个s*呢?
请指点迷津!
[解决办法]因为你这里给的例子根本不需要删除s。
这里既不能初始化s,也不能删除s,如果你加了这两个中的任何一个操作,编译就过不了了。
[解决办法]你给的例子中的share_ptr需要的只是一个符号而已,并没有用到s的内容。
如果你想编译不通过,可以给base.ps加构造参数或者赋值,肯定是通不过的。