我有一个分配器感知容器,如果它是一个有状态的分配器,它必须存储分配器(例如:多态分配器)。否则,分配器不应占用任何空间。我以为stdlib会使用类似于空基优化的东西来实现这一点,然而,我似乎无法让它工作:
演示
#include <cstdio>
#include <memory>
#include <memory_resource>
#include <iostream>
template <typename T, typename Allocator>
struct MyContainerBase {
Allocator allocator;
};
template <typename T, typename Allocator = std::allocator<T>>
struct MyContainer : private MyContainerBase<T, Allocator>
{
using base_ = MyContainerBase<T, Allocator>;
T myint_;
};
int main() {
MyContainer<int> c;
std::cout << "size = " << sizeof(MyContainer<int>) << std::endl;
}
产量
size = 8
我查看了vector的libc和libstdc实现,但根本找不到存储的分配器?不过它仍然可以与pmr分配器一起工作。我该怎么做?另外,我必须至少有一些分配器对象引用,以便与std::allocator_traits<Allocator>(myalloc);
一起使用
1条答案
按热度按时间nxagd54h1#
在C20之前,这需要使用空基优化,但在C20中,解决方案非常简单:使用
no_unique_address
attribute:联机编译程序