1 Star 2 Fork 8

白乾龙/cosmos深入应用c++11代码优化与工程级应用

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
SharedptrUtil.hpp 1.19 KB
一键复制 编辑 原始数据 按行查看 历史
WangXi 提交于 2015-10-27 14:23 . #pragma once
#pragma once
#include <memory>
using namespace std;
//通过shared_ptr创建数组
template<typename T>
shared_ptr<T> make_shared_array(size_t size)
{
return shared_ptr<T>(new T[size], default_delete<T[]>());
}
//make_unique的实现
//支持普通指针
template<class T, class... Args> inline
typename enable_if<!is_array<T>::value, unique_ptr<T> >::type make_unique(Args&&... args)
{
return unique_ptr<T>(new T(std::forward<Args>(args)...));
}
//支持动态数组
template<class T> inline
typename enable_if<is_array<T>::value && extent<T>::value==0, unique_ptr<T> >::type
make_unique(size_t size)
{
typedef typename remove_extent<T>::type U;
return unique_ptr<T>(new U[size]());
}
//过滤掉定长数组的情况
template<class T, class... Args>
typename enable_if<extent<T>::value != 0, void>::type make_unique(Args&&...) = delete;
//------shared_ptr异常安全地管理第三方内存
#define GUARD(P) std::shared_ptr<void> p##p(p, [](void*p){ GetHandle()->Release(p);});
void* p = GetHandle()->Create();
GUARD(p); //安全
//------unique_ptr异常安全地管理第三方内存
#define GUARD(P) std::unique_ptr<void, void(*)(int*)> p##p(p, [](void*p){ GetHandle()->Release(p);});
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/baiqianlong/cosmos.git
git@gitee.com:baiqianlong/cosmos.git
baiqianlong
cosmos
cosmos深入应用c++11代码优化与工程级应用
master

搜索帮助