C++ 通过PIMPL惯用法设计调用构造函数

C++ 通过PIMPL惯用法设计调用构造函数,c++,pimpl-idiom,C++,Pimpl Idiom,现在使用PIMPL习惯用法,我正在尝试以以下方式调用ProcessImpl构造函数: /*Process.h*/ class Process { public: Process(ProcessID thirdParty_pid); protected: void createImpl(); private: ProcessImpl * _impl; }; /*ProcessImpl.h*/ class ProcessImpl {

现在使用PIMPL习惯用法,我正在尝试以以下方式调用ProcessImpl构造函数:

/*Process.h*/
class Process  {
    public:
    Process(ProcessID thirdParty_pid);

    protected:
    void createImpl();

    private:
    ProcessImpl  * _impl;
};


/*ProcessImpl.h*/

 class ProcessImpl {
      public :
      ProcessImpl(ProcessID thirdParty_pid);
 }
但我有以下错误 错误:无法在初始化中将ProcessImpl转换为ProcessImpl*


请帮助解决此错误,并让我知道调用表达式
ldframework::ProcessImpl::ProcessImpl(tpid)
的正确度量方法是什么,它的计算结果是类型
ProcessImpl
,它与类型
ProcessImpl*
,即成员的类型
\impl
不同

尝试在初始值设定项列表中使用
new
,并记住析构函数中的
delete

e、 g

然后在你的析构函数中

: _impl( new ldframework::ProcessImpl::ProcessImpl(tpid) )

由于
\u impl
是指针,因此必须使用指针对其进行初始化:

delete _impl;

请注意,在初始化
\u impl
\u impl
时使用
new
关键字是一个指针(PIMPL=>指向实现的指针)

因此,使用
new
关键字进行初始化

Process::Process(ldframework::ProcessID tpid)
    : _impl(new ldframework::ProcessImpl::ProcessImpl(tpid))
{ ... }

但是将PIMPL与
智能指针一起使用
,因此,请阅读

_impl是指向ProcessImpl的指针,但您正在传递一个值。更改为:_impl(新的ldframework::ProcessImpl::ProcessImpl(tpid))(并设法在进程的析构函数中处理它)。非常感谢它的工作。让我知道wts通过PIMPL惯用法调用构造函数的正确方法
Process::Process(ldframework::ProcessID tpid)
    : _impl(new ldframework::ProcessImpl::ProcessImpl(tpid))
{ ... }
Process::Process(ldframework::ProcessID tpid)
  :_impl( new ldframework::ProcessImpl::ProcessImpl(tpid)) {
}