C++ 通过PIMPL惯用法设计调用构造函数
现在使用PIMPL习惯用法,我正在尝试以以下方式调用ProcessImpl构造函数: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 {
/*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)) {
}