首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

为什么shared_ptr可以构造不完整的类型? 而unique_ptr不可以?该怎么解决

2012-05-01 
为什么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加构造参数或者赋值,肯定是通不过的。

热点排行