- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有这样的想法:
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 实现有不同的内部命名空间怎么办?那它不会找到我的声明吗?但它应该会在声明中出错。
最佳答案
default_delete
应该在 std 命名空间中定义,并且可以专门化 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
。
~shared_ptr();
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.
关于c++ - 将 `std::default_delete` 专门化为 `std::shared_ptr`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20283685/
我有一个带有模板函数的基类,该函数具有通用模板类型和专用版本。 #ifndef BASE_CLASS #define BASE_CLASS #include using namespace std;
我有这个 3D vector 模板 template class Vec3TYPE{ public: union{ struct{ TYPE x,y,z; }; struct{ TY
我是一名优秀的程序员,十分优秀!