2017-08-23 8 views
0

私は破壊の呼び出しでリリースする必要があるサードパーティオブジェクトの束を持っています。これらのオブジェクトをヒープ上に割り当てる必要があるので、メモリ管理を処理するためにstd :: unique_ptrを作成したかったのです。しかし、私のデリーターは決して呼び出されません。私は間違って何をしていますか?std :: unique_ptrのカスタムテンプレートディレターが呼び出されていません

template<typename T> 
class ObjPtrDeleter 
{ 
public: 
    void operator()(T* obj) 
    { 
     if (obj) 
      obj->destroy(); 
    } 
}; 

int main(int args, char** argv) 
{ 
    SomeFactory factory; 
    std::unique_ptr<ISomeInterface1, ObjPtrDeleter<ISomeInterface1>> obj1(factory.create(1)); 
    std::unique_ptr<ISomeInterface2, ObjPtrDeleter<ISomeInterface2>> obj2(factory.create(2)); 

    return 0; 
} 
+1

何も間違いはありません。 [mcve]を投稿してください。 –

答えて

0

問題が見つかりました。サードパーティライブラリは、抽象基本クラスの仮想デストラクタを定義していませんでした。それが私のカスタムディレクターが呼び出されなかった理由です。

関連する問題