and*_*y.s 5 c++ pointers objective-c objective-c++ delete-operator
问题是主题.
我想写一些通用模板函数来安全删除对象,并想知道是否可以使用这样的东西:
template< class T > void SafeDelete( T*& pVal )
{
if(objc_is_cpp_object(pVal)){
delete pVal;
pVal = NULL;
}
else
[pVal release]
}
Run Code Online (Sandbox Code Playgroud)
正如评论中提到的,我建议不要混合 C++delete和 Objective-C release。
仅出于技术角度来看,您可以使用以下 SFINAE 技巧运行时:
template<typename T> struct void_ { typedef void type; };
template<typename, typename = void>
struct CppType { static const bool value = false; };
template<typename T>
struct CppType<T, typename void_<int (T::*)>::type> { static const bool value = true; };
template< class T >
void SafeDelete( T*& pVal )
{
if(CppType<T>::value || std::is_pod<T>::value) { // <-----
delete pVal;
pVal = 0;
}
else {
// [pVal release];
}
}
Run Code Online (Sandbox Code Playgroud)
可能is_pod在 C++11、boost 等中可用。但它很容易实现。
| 归档时间: |
|
| 查看次数: |
148 次 |
| 最近记录: |