gpt4 book ai didi

c++ - Stephen Lavavej 的 Mallocator 在 C++11 中是否相同?

转载 作者:IT老高 更新时间:2023-10-28 23:17:52 25 4
gpt4 key购买 nike

8 年前,Stephen Lavavej 发表了 this blog post包含一个简单的分配器实现,名为“Mallocator”。从那时起,我们已经过渡到 C++11(以及很快的 C++17)时代......新的语言特性和规则是否会影响 Mallocator,还是仍然相关?

最佳答案

STL 本人在他的 STL Features and Implementation techniques 中对此问题有答案。在 CppCon 2014 上发表演讲(从 26'30 开始)。

slides在github上。

我合并了下面幻灯片28和29的内容:

#include <stdlib.h> // size_t, malloc, free
#include <new> // bad_alloc, bad_array_new_length
template <class T> struct Mallocator {
typedef T value_type;
Mallocator() noexcept { } // default ctor not required
template <class U> Mallocator(const Mallocator<U>&) noexcept { }
template <class U> bool operator==(
const Mallocator<U>&) const noexcept { return true; }
template <class U> bool operator!=(
const Mallocator<U>&) const noexcept { return false; }

T * allocate(const size_t n) const {
if (n == 0) { return nullptr; }
if (n > static_cast<size_t>(-1) / sizeof(T)) {
throw std::bad_array_new_length();
}
void * const pv = malloc(n * sizeof(T));
if (!pv) { throw std::bad_alloc(); }
return static_cast<T *>(pv);
}
void deallocate(T * const p, size_t) const noexcept {
free(p);
}
};

请注意,它正确处理了分配中可能出现的溢出。

关于c++ - Stephen Lavavej 的 Mallocator 在 C++11 中是否相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36517825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com