在不使用new
的情况下创建std::shared_ptr
后,是否可以使用自定义删除器?
我的问题是对象的创建由工厂类处理,其构造函数和析构函数受保护,这会导致编译错误,并且我不想使用new
,因为它有缺点。
详细说明:我喜欢像这样创建共享指针,两者都没有让您设置自定义删除器(我认为):
auto sp1 = make_shared<Song>(L"The Beatles", L"Im Happy Just to Dance With You");
或者我可以像这样创建它们,这样就可以通过参数设置删除器:
auto sp2(new Song, MyDeleterFunc);
但第二种使用new
的方式,据我所知,不如顶部的分配方式高效。
也许这样更清楚:是否可能同时获得make_shared<>
的好处和自定义删除器?这是否意味着必须编写一个分配器?
delete sptr.get()
这样的恶意代码都无法执行。 - Fozi