/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_;
};