回覆列表
  • 1 # 使用者4612509819199

    首先要區分 new 和 operator new(size_t), 前者始終 initialize, 即使是像 new char[12] 這樣也是 default initialized, 給予每一個元素 indeterminate value (物理上相當於沒有 initialize)。後者是單純地獲取 memory resource. 後者提供標準意義上的 uninitialized storage; allocator 包裝的是後者。

    然後關於在 uninitialized storage 上構造和析構,這在標準庫裡是有專門的 pattern 的,參考 Standard library header <memory> 裡關於 Uninitialized storage.

    標準庫內部使用的過程是支援 uses-allocator construction 的,這是和已經開放出來的介面唯一的區別。不過大概你也用不著 allocator, 我上面也只是把 std::allocator 當作 operator new 和 operator delete 的 shortcut 而已。

    至於 alignment, C++17 要求 new 透過新的 operator new(size_t, align_val_t) 系列簽名支援 over-aligned types, 但沒有要求 std::allocator 支援(但 libstdc++ 實現了這個),但又要求 std::pmr::polymorphic_allocator 支援(但 libc++ 的 std::experimental::pmr::polymorphic_allocator 又是瞎實現的「我為什麼要說“又”?」),總之亂得可以。 aligned_alloc 保平安吧。

  • 中秋節和大豐收的關聯?
  • 給的組詞有什麼?