Ну, после прочтения ваших комментариев, кажется, вы хотите иметь возможность сделать копий класса 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);