c – 为`std :: shared_ptr`专门化`std :: default_delete`
我有这个想法:
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命名空间中定义default_delete,并且可以从std命名空间中专门化实体.
namespace std { template<class T> struct default_delete; template<class T> struct default_delete<T[]>; 但是,您的专业化违反了std :: default_delete的一些要求,因此是UB.关于这件事的行情是here(感谢R. Martinho Fernandes). 但是,未指定shared_ptr使用default_delete.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |