我目前正在学习多态分配器,我看了一些视频,并试图理解它。如果我有这样的代码:
class MyClass {
public:
MyClass(int val = 0) : m_val(val) {
std::cout << "MyClass constructed with value: " << val << std::endl;
}
~MyClass() {
std::cout << "MyClass destroyed with value: " << m_val << std::endl;
}
private:
int m_val;
};
int main() {
char buffer[1024];
std::size_t buffer_size = sizeof(buffer);
// Use a monotonic buffer resource
{
std::pmr::monotonic_buffer_resource buffer_resource{buffer, buffer_size, std::pmr::null_memory_resource()};
std::pmr::polymorphic_allocator<byte> allocator{ &buffer_resource };
//std::pmr::polymorphic_allocator<MyClass> allocator{ &buffer_resource }; //still OK to use
{
std::pmr::vector<MyClass> vec(allocator);
vec.reserve(256);
for(int i = 0; i < 256; i++){
vec.emplace_back(i);
}
}
}
return 0;
}
std::pmr::polymorphic_allocator<byte>
和std::pmr::polymorphic_allocator<MyClass>
有什么区别?为什么两者都能正常工作?
1条答案
按热度按时间pod7payv1#
从
std::vector
开始:分配器-一个分配器,用于获取/释放内存,并构造/销毁内存中的元素。类型必须满足分配器的要求。行为未定义(C20之前)/如果
Allocator::value_type
与T
不相同,则程序是病态的(C20起)。因此,如果
Allocator::value_type
与MyClass
不同:因此正确的用法是使用
std::pmr::polymorphic_allocator<MyClass>
。为什么两者都能正常工作?
std::pmr::vector<MyClass>
构造函数......将您提供的分配器转换为
std::pmr::polymorphic_allocator<MyClass>
,它使用与allocator
相同的内存资源。