重複の可能性:
C++ の純粋な仮想デストラクタ
class A{
    public:
        virtual ~A()=0;
};
class B:public A{
        int *i;
    public:
        ~B() {delete i;}
};
int main(){
    B* temp = new B;
}
B を A の実装にしようとしているだけです。何らかの理由でこれを行うことはできません。
重複の可能性:
C++ の純粋な仮想デストラクタ
class A{
    public:
        virtual ~A()=0;
};
class B:public A{
        int *i;
    public:
        ~B() {delete i;}
};
int main(){
    B* temp = new B;
}
B を A の実装にしようとしているだけです。何らかの理由でこれを行うことはできません。
C++ では、デストラクタは純粋仮想にすることができます。
class A{
    public:
        virtual ~A()=0;
};
ただし、いずれの場合も実装する必要があります。
inline A::~A() {} 
それ以外の場合、A は使用可能なクラスではありません。つまり、派生 (S/B) の破壊は不可能です。そして、この行では破壊の可能性が必要です:
  B* temp = new B;
例外がスローされた場合、コンパイラは自動的に一時ファイルを破棄するため...
あなたのコメントによると"Yeah i want A to basically be just a container class. Do not want any implementation of A"。クラス B はprotected/private、継承ではなく A からpublic継承されます。
virtual ~A()は許可されてpureいますが、実装を提供する必要があります~A()。
class A{
public:
  virtual ~A() = 0
  {
    cout << "~A"<<endl;
  }
};
class B : private /*protected*/ A{
  int *i;
public:
  B() : A(){
    i = new int;
  }
  ~B() {
    delete i;
  }
};
int main(){
    B* temp = new B;
    delete temp;
    return 0;
}