C++17 多态记忆资源不起作用



我试图理解c ++ 17 pmr。 所以我这样做了,它不像我想象的那样工作,会出什么问题?

template <typename T>
class Memory : public std::experimental::pmr::memory_resource {
public:
Memory() { this->memory = allocate(sizeof(T), alignof(T)); }
void *getMemory() { return this->memory; }
~Memory() { deallocate(this->memory, sizeof(T), alignof(T)); }
private:
void *do_allocate(std::size_t bytes, std::size_t alignment)
{
memory = ::operator new(bytes);
}
void do_deallocate(void *p, std::size_t bytes, std::size_t alignment)
{
::operator delete(memory);
}
bool do_is_equal(
const std::experimental::pmr::memory_resource& other) const noexcept
{
}
void *memory;
};

我的实施可能出现什么问题? 这是客户端..

Memory<std::string> mem;
std::string * st = (std::string*)mem.getMemory();
st->assign("Pius");
std::cout << *st;

多态资源分配器分配内存;这就是它们所做的一切。与容器分配器不同,它们不创建对象。这就是为什么他们返回void*s。

内存资源不应单独使用。这就是std::polymorphic_allocator<T>存在的原因。您也可以使用放置new和手动析构函数调用自己创建/销毁对象。

此外,您的memory_resource实现毫无意义。do_allocate应该返回分配的内存,而不是将其存储在内部。您的函数通过不返回任何内容来引发未定义的行为(您的编译器应该警告过(。

相关内容

最新更新