只要我不移动构造函数的定义(B
) 到标题B.h
.
B.h
class Imp; //<--- error here
class B{
public:
std::unique_ptr<Imp> imp;
B(); //<--- move definition to here will compile error
~B();
//// .... other functions ....
};
B.cpp
#include "B.h"
#include "Imp.h"
B::B(){ }
~B::B(){ }
Imp.h
class Imp{};
Main.cpp(编译我)
#include "B.h"
错误:删除了指向不完整类型的指针
错误:使用未定义类型“Imp”C2027
我可以以某种方式理解析构函数必须移至.cpp
,因为解构Imp
可能被称为:-
delete pointer-of-Imp; //something like this
然而我不明白为什么该规则还涵盖构造函数(问题)。
我读过了 :-
-
删除指向不完整类型和智能指针的指针
描述析构函数需要位于的原因.cpp
.
-
类型不完整的 std::unique_ptr 将无法编译
关于默认析构函数的警告。
构造函数需要销毁类成员,以防异常退出。
我不认为制作构造函数noexcept
会有所帮助,尽管也许应该如此。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)