Search code examples
c++qtqt4d-pointer

QExplicitlySharedPointer and inheritance


What is the best way to use QExplicitlySharedPointer and inherited classes. I would like when the BaseClass exits on it's own to have a my d pointer be QExplicitlySharedPointer<BaseClassPrivate> and when I have a Derived class on top of this base class I'd like to have d be a QExplicitlySharedPointer<DerivedClassPrivate>.

I tried making DerivedClassPrivate inherit from BaseClassPrivate, and then make the d pointer protected and re-define the d-pointer in my derived class, but it seems now that I have two copies of the d-pointer both local to the class they are defined in... which is not what I want.


Solution

  • What about this:

    template< typename P = BaseClassPrivate >
    class BaseClass
    {
    public:
      void myBaseFunc() { d->myBaseFunc(); }
    protected:
      QExplicitlySharedDataPointer< P > d;
    };
    
    class DerivedClass : public BaseClass< DerivedClassPrivate >
    {
    public:
      void myDerivedFunc() { d->myDerivedFunc(); }
    };