std::unique_ptr のデリータをあとから設定する

と、いうのが Lingr の C++ 部屋に貼られていたので覚書。

[ソース]

#include <memory>
#include <functional>
#include <iostream>

int
main(){
    auto p = std::unique_ptr<int, std::function<void(int*)>>{ new int{42}, std::default_delete<int>{} };

    // deleter を設定
    p.get_deleter() = [](int* p){
        std::cout << "call deleter" << std::endl;
        delete p;
    };

    std::cout << *p << std::endl;

    return 0;
}

[出力]

42
call deleter


get_deleter() は参照オブジェクトを返すのでこんな感じで代入する事ができます。
便利……なのかな?