如何从pimpl类调用调用者类的复制构造函数?

时间:2012-02-20 02:59:15

标签: c++ copy-constructor pimpl-idiom

我只需要知道是否要从pImpl类调用我的copyconstuctor,我该怎么做? 例如:

CImpl::SomeFunc()
{

//cloning the caller class instance

caller = new Caller(*this)// I cant do this since its a pImpl class

}

我怎样才能实现这个目标?

1 个答案:

答案 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);