Поскольку С++ 11, по нескольким причинам, разработчики склонны использовать классы интеллектуального указателя для динамических объектов жизни. И с этими новыми классами умных указателей, стандартами даже предлагайте не использовать таких операторов, как new, вместо этого они предлагают использовать make_shared или make_unique, чтобы избежать склонности к ошибкам.
Если нам нравится использовать класс интеллектуальных указателей, например shared_ptr, мы можем построить один, например,
shared_ptr<int> p(new int(12));
Также мы хотели бы передать пользовательский deleter для классов интеллектуального указателя,
shared_ptr<int> p(new int(12), deleter);
С другой стороны, если мы хотим использовать make_shared для распределения, например. int, вместо использования конструктора new и shared_ptr, как и в первом выражении выше, мы можем использовать
auto ip = make_shared<int>(12);
Но что, если нам нравится также передавать пользовательский deleter на make_shared, есть ли правильный способ сделать это? Похоже, что компиляторы, по крайней мере, gcc, дают ошибку,
auto ip = make_shared<int>(12, deleter);