在不使用new
的情况下创建std::shared_ptr
后可以使用自定义删除程序吗?std :: shared_ptrs的自定义删除程序
我的问题是对象创建是由工厂类及其构造函数处理的&析构函数受保护,这给出了编译错误,我不想使用new
,因为它的缺点。
要精心:我希望创建这样的共享指针,它不会让你设置一个定制删除(我认为):
auto sp1 = make_shared<Song>(L"The Beatles", L"Im Happy Just to Dance With You");
或者,我可以这样创建它们,这也让满足通过参数设定的删除器:
auto sp2(new Song, MyDeleterFunc);
但是第二个使用new
,这AFAIK不是作为顶部排序分配的那样高效。
也许这是更清楚的:是否有可能获得make_shared<>
以及定制删除的好处?这是否意味着必须编写一个分配器?
你可以添加一些(伪)代码来解释你需要什么或其他详细说明吗? (我怀疑是一个XY问题) –
我不明白你的问题,ofc你可以自由地初始化你的值的shared_ptrs,它不一定是由新的操作符返回的东西 –
可能的重复[使用自定义删除与std :: shared \ _ptr](http://stackoverflow.com/questions/12340810/using-custom-deleter-with-stdshared-ptr) –