这是一个设计缺陷吗?

pan*_*ajt 0 c++ design-patterns

考虑两个班级

class A{
     public:
       A(){
       }
       ~A(){
       }
};


class AImpl : public A{
      public:
         AImpl(){
             a = new AInternal();
         }
         AImpl(AInternal *a){
             this->_a = a;
         }
         ~AImpl(){
             if(a){
                delete a;
                a = null;
             }
         }
       private:
             AInternal *a;
};
Run Code Online (Sandbox Code Playgroud)

我试图隐藏AInternal的实现并只暴露A的接口.我在这里看到两件事

  1. A级完全是空的.
  2. 隐藏基本上是通过继承来实现的.我必须实际使用从A到AImpl的向下转换和向上转换,反之亦然.

这是一个很好的设计.由于缺乏设计经验,我看不出它的缺陷以及它为什么不好?

Mar*_*som 18

你使用3个类过度复杂化了.我认为你要找的是pimpl成语.