创建后是否可以使用自定义删除器std::shared_ptr
不使用new
?
我的问题是对象创建是由工厂类处理的,并且它的构造函数和析构函数受到保护,这会产生编译错误,我不想使用new
因为它的缺点。
详细说明:我更喜欢创建这样的共享指针,它不允许您设置自定义删除器(我认为):
auto sp1 = make_shared<Song>(L"The Beatles", L"Im Happy Just to Dance With You");
或者我可以像这样创建它们,这确实让 met 通过参数设置删除器:
auto sp2(new Song, MyDeleterFunc);
但第二个使用new
,据我所知,它不如顶级分配那么有效。
也许这更清楚:是否有可能获得以下好处:make_shared<>
以及自定义删除器?这是否意味着必须编写一个分配器?
不,没有任何形式std::make_shared http://en.cppreference.com/w/cpp/memory/shared_ptr/make_shared这需要一个自定义删除器。
如果您需要退回shared_ptr
如果使用自定义删除器,那么您将不得不承受性能损失。
想一想:如果你使用make_shared
然后它会分配一个更大的内存区域,可以将引用计数和你的对象一起存储,并且将调用placement new。这shared_ptr
从返回make_shared
已经有一个自定义删除器,它显式调用对象的析构函数,然后释放较大的内存块。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)