簡體   English   中英

C ++ 17多態內存無法正常工作

[英]C++17 polymorphic memory recources not working

我試圖了解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*的原因。

內存資源並不意味着要自己使用。 這就是為什么存在std::polymorphic_allocator<T>的原因。 您還可以使用“ placement”( new和手動的析構函數調用)自行創建/破壞對象。

同樣,您的memory_resource實現沒有任何意義。 do_allocate應該返回分配的內存,而不是在內部存儲它。 您的函數通過不返回任何內容(編譯器應該警告過)來引發未定義的行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM