Поскольку С++ 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);