私はというクラスから継承したDerived
というクラスを持っているとします。 Base
は特別です。新しいものを使用して作成することもできますが、カスタムのDeleterを使用して破棄する必要があります。派生クラスでカスタムディテッターでstd :: make_uniqueを使用していますか?
BaseDeleter
というカスタムディレクターと一緒にをunique_ptr
に追加したいと思います。これにより、Base
から派生した他のクラスを割り当てることもできます。そして、例外安全性と一貫性のために、私はunique_ptr
をお尻にするためにstd::make_unique
を使用したいと思います。
#include <memory>
class Base
{
};
class Derived : public Base
{
};
struct BaseDeleter
{
void operator()(Base* base)
{
// Perform some special deleting
}
};
class Big
{
public:
Big()
{
//pointer.reset(new Derived()); // This works!
pointer = std::make_unique<Derived, BaseDeleter>(); // But this doesn't...
}
private:
std::unique_ptr<Base, BaseDeleter> pointer;
};
int main()
{
Big clazz;
}
は、残念ながら、これは両方のVisual Studio 2015のアップデート2とgcc-5.1でコンパイルに失敗します。
は、私が欲しいものを示している小さなスニペットを作成しました。 ( ideone)これはなぜ機能しませんか?どのように
std::unique_ptr
を割り当てるのに
std::make_unique
を使うことができますか?