自从C++11以来,由于多种原因,开发者倾向于使用智能指针类来管理动态分配的对象的生命周期。随着这些新的智能指针类的出现,标准甚至建议不要使用像new
这样的运算符,而是建议使用make_shared
或make_unique
来避免一些容易出错的问题。
如果我们想使用一个智能指针类,比如shared_ptr
,我们可以像这样构造一个:
shared_ptr<int> p(new int(12));
此外,我们希望将自定义删除器传递给智能指针类。
shared_ptr<int> p(new int(12), deleter);
另一方面,如果我们想使用make_shared
来分配内存,例如int
,而不是使用new
和shared_ptr
构造函数,就像上面第一个表达式那样,我们可以使用:
std::make_shared<int>();
auto ip = make_shared<int>(12);
但是如果我们还想将自定义的删除器传递给 make_shared ,有正确的方法吗? 似乎编译器(至少是gcc)会报错:
auto ip = make_shared<int>(12, deleter);
make_shared()
函数以支持此操作,这是可行的。 - user1095108