c++ - 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
应该返回分配的内存,而不是在内部存储。您的函数通过不返回任何内容(您的编译器应该警告过)来引发未定义的行为。
推荐阅读
- javascript - 如何创建多个子分支并在子进程和主进程之间发送多条消息
- javascript - 如何修复我的代码,使其在我的函数中返回 num(digit)?
- reactjs - CRA webpack - 输出单独的文件
- r - 为什么这个简单的混合模型不能收敛?
- java - Apache Shiro 编程配置
- amazon-web-services - CloudWatch Logs Insights 解析语法
- azure-cosmosdb - 无法将 Cassandra CQL shell 连接到 Azure-CosmosDB
- algorithm - 向量中的最大和,根据条件,由另一个向量定义
- c++ - 在 C++ 中读取 OutputDataStream.writeShort(int v)
- python - 如何使用 django 从 oracle 11g 中的不同模式访问表?