加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 为`std :: shared_ptr`专门化`std :: default_delete`

发布时间:2020-12-16 05:07:17 所属栏目:百科 来源:网络整理
导读:我有这个想法: namespace std { template class default_deleteIplImage { public: void operator()(IplImage *ptr) const { cvReleaseImage(ptr); } };};typedef std::shared_ptrIplImage IplImageObj; 我真的没有找到很多信息是否支持我专门使用default_d
我有这个想法:
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.

06001

Effects:

  • If *this is empty or shares ownership with another shared_ptr instance (use_count() > 1),there are no side effects.

  • Otherwise,if *this owns an object p and a deleter d,d(p) is called.

  • Otherwise,*this owns a pointer p,and delete p is called.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读