我只需要知道是否要从pImpl类调用我的copyconstuctor,我该怎么做? 例如:
CImpl::SomeFunc()
{
//cloning the caller class instance
caller = new Caller(*this)// I cant do this since its a pImpl class
}
我怎样才能实现这个目标?
答案 0 :(得分:3)
在阅读完您的评论之后,您似乎希望能够提供Caller
课程的副本。如果是这样,那么在这种情况下,您应该为Caller
类实现复制构造函数,您可以在其中制作m_pImpl
指针的硬拷贝。
class CallerImpl;
class Caller
{
std::shared_ptr<CallerImpl> m_pImpl;
public:
Caller(Caller const & other) : m_pImpl(other.m_pImpl->Clone()) {}
//...
};
然后您可以在Clone()
类中实现CallerImpl
函数:
class CallerImpl
{
public:
CallerImpl* Clone() const
{
return new CallerImpl(*this); //create a copy and return it
}
//...
};
现在您可以复制Caller
:
//Usage
Caller original;
Caller copy(original);