C++ 使用分配器
这些版本的新建和删除是否异常安全?有什么可能的陷阱吗 假设定制的\u分配器\u类型与STL兼容。还假设分配器的构造函数没有任何副作用,并且所有实例都是等效的 提前感谢您的输入C++ 使用分配器,c++,allocator,C++,Allocator,这些版本的新建和删除是否异常安全?有什么可能的陷阱吗 假设定制的\u分配器\u类型与STL兼容。还假设分配器的构造函数没有任何副作用,并且所有实例都是等效的 提前感谢您的输入 template <typename T> inline T * customized_new(const T& t) { customized_allocator_type<T> alloc; T * ptr = alloc.allocate(1); if (pt
template <typename T>
inline T * customized_new(const T& t)
{
customized_allocator_type<T> alloc;
T * ptr = alloc.allocate(1);
if (ptr==0)
throw std::bad_alloc();
try {
alloc.construct(ptr, t);
} catch (...) {
alloc.deallocate(ptr, 1);
throw;
}
return ptr;
}
template <typename T>
inline void customized_delete(T * ptr)
{
if (ptr==0)
return;
customized_allocator_type<T> alloc;
alloc.destroy(ptr);
alloc.deallocate(ptr, 1);
};
模板
内联T*自定义_新(常数T&T)
{
自定义分配程序类型alloc;
T*ptr=alloc.allocate(1);
如果(ptr==0)
抛出std::bad_alloc();
试一试{
分配构造(ptr,t);
}捕获(…){
分配解除分配(ptr,1);
投掷;
}
返回ptr;
}
模板
内联作废自定义删除(T*ptr)
{
如果(ptr==0)
返回;
自定义分配程序类型alloc;
分配破坏(ptr);
分配解除分配(ptr,1);
};
如果定制的\u分配器\u type的construct()函数的行为已知它不会在异常时释放内存,那么您的解决方案是好的
注意:空指针的自定义_delete()检查中有一个输入错误-应该是:
if (ptr == 0)
return;
这(充其量)是多余的:
if (ptr==0)
throw std::bad_alloc();
如果
customized\u allocator\u type
满足标准库分配器要求,则如果无法获得存储,则必须引发异常。从allocate
返回null是不正确的。同意。符合STL的分配器不应返回null。我认为你的回答已被接受。谢谢