gpt4 book ai didi

c++ - Pimpl with unique_ptr : Why do I have to move definition of constructor of interface to ".cpp"?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:26:37 25 4
gpt4 key购买 nike

只要我不将构造函数(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"

Error: deletion of pointer to incomplete type
Error: use of undefined type 'Imp' C2027

我能以某种方式理解必须将析构函数移动到 .cpp,因为可能会调用 Imp 的解构:-

delete pointer-of-Imp;  //something like this

但是,我不明白为什么规则也涵盖构造函数(问题)。

我已阅读:-

最佳答案

构造函数需要销毁类成员,以防异常退出。

我不认为使构造函数 noexcept 有帮助,尽管也许应该有帮助。

关于c++ - Pimpl with unique_ptr : Why do I have to move definition of constructor of interface to ".cpp"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42416776/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com