C++ unique_ptr解惑篇

/usr/include/c++/8/bits/unique_ptr.h:79:16: 错误:invalid application of ‘sizeof’ to incomplete type

  • centos系统
  • g++编译器

在使用unique_ptr这个智能指针的时候,偶尔会遇到这个报错了,一直没有细想,一直都是莽撞,左试试右试试,今天终于解惑了,这个原因是当编译器默认生成了析构函数,而你有一个前置声明的类class Test,你没有include “Test.h”因为在想着降低编译时候的依赖,可是问题突然出现就蒙了。你在想我这是个指针按理来说头文件前置声明就行了阿?当你试试include "Test.h"突然发现,好使了欣喜若狂的时候误以为是uniqe_ptr不支持前置声明,我一开始就是这么误以为的。其实是不对的,尽管在A.cpp文件中include了include “Test.h”,可是A的析构函数默认生成在A.h文件中,并不知道Test的大小,所以会报错。当然你可以在.h文件直接引用Test.h文件,但为了降低依赖,可以在类A中声明析构函数,在A.cpp中调用这个析构函数

class Test;
class A{
	std::unique_ptr<Test> tPtr_;
};

解惑的文章链接

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值