我有这样的想法:
namespace std {
template<>
class default_delete<IplImage> {
public:
void operator()(IplImage *ptr) const {
cvReleaseImage(&ptr);
}
};
};
typedef std::shared_ptr<IplImage> IplImageObj;
我并没有找到太多关于是否支持我专门使用 default_delete
, 以及 shared_ptr
是否默认也使用 default_delete
的信息。
在 Clang 5.0.0 中它可以正常工作。
那么,这是否被支持呢?
如果 STL 实现有一个不同的内部命名空间会怎样呢?那么它就找不到我的声明了吗?但是它应该会报告声明错误。
std::unique_ptr
使用的默认销毁策略。因此,这是另一种在某些由std::unique_ptr
使用的特定类型上全局覆盖默认销毁策略的方式。我认为相同的情况也适用于shared_ptr
,并且在 Clangs STL 实现中也是如此,但根据 C++ 标准似乎并非如此。 - Albertstd::default_delete
仅适用于std::unique_ptr
,而不适用于std::shared_ptr
... - Chris Doddstd::shared_ptr
,但对于std::unique_ptr
很有用。 - ShadowRanger