使用自定义删除器增强scoped_ptr/scoped_array
我不知道如何让 scoped_ptr 或 scoped_array 使用自定义删除器。也许还有另一种实现允许类似于 shared_ptr 的受控删除?
顺便说一句,为什么 shared_ptr 允许自定义删除器,但 scoped_ptr 不允许?只是好奇。
I don't see how to get scoped_ptr or scoped_array to use a custom deleter. Maybe there is another implementation which allows controlled deletion similar to shared_ptr?
Btw, why does shared_ptr allow custom deleter but scoped_ptr doesn't? Just curious.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您不能。
如果您的编译器支持右值引用并且您的标准库实现实现了 std::unique_ptr,您就可以使用它。
除此之外,boost::scoped_ptr 的实现非常简单。 最新版本不到100行简单代码。创建您自己的具有自定义删除器的派生非常简单(通过模板参数进行静态删除,或者通过运行时提供的函数或函子进行动态删除)。
You can't.
If your compiler supports rvalue references and your Standard Library implementation implements
std::unique_ptr
, you can use that.Otherwise, the
boost::scoped_ptr
implementation is very straightforward. The latest version is less than 100 lines of simple code. It would be quite simple to create your own derivative that has a custom deleter (either a static via a template parameter or dynamic via a function or functor provided at runtime).scoped_ptr
不允许自定义删除器。我可以假设的主要原因是,如果它将boost::function<>
保留为sizeof(T*)
,那么它的大小将不等于sizeof(T*)
code>shared_ptr 确实如此。我认为最可移植的选项是使用
shared_ptr
或编写自己的scoped_ptr
支持删除器。scoped_ptr
doesn't allow custom deleter. The main reason as I can suppose is that its' size will not be equal tosizeof(T*)
if it would keep aboost::function<>
asshared_ptr
does.I think the most portable options are to use
shared_ptr
or to write your ownscoped_ptr
that will support deleters.你可以重载boost::checked_delete函数,例如
重载后,scoped_ptr将调用checked_delete而不是delete。
You can overload boost::checked_delete function, e.g.
After overloading, scoped_ptr will call checked_delete rather than delete.
作用域指针和作用域数组的另一个实现可以在 Qt
http://doc.qt.io 中找到/qt-5/qscopedpointer.html
它允许自定义删除器。
Another implementation of scoped pointer and scoped array is found in Qt
http://doc.qt.io/qt-5/qscopedpointer.html
It allows for custom deleter.