假设您开发了一个要与std::vector
一起使用的优化的自定义分配器(例如,对于小分配,自定义分配器从堆栈而不是堆中获取内存,类似于std::string
的SSO;或者它分配了大块在Windows上使用VirtualAlloc
来存储内存,然后从一个块中刻出单个分配(仅增加一个指针)。
typedef std::vector<T, OptimizedAllocator<T>> OptimizedVector;
像这样从函数返回 vector 的上下文中如何使用它?
OptimizedVector DoSomething()
{
OptimizedVector<int>::allocator_type alloc{};
OptimizedVector<int> v{alloc};
// Do stuff...
return v;
}
在函数作用域的末尾,分配器对象被破坏,因此返回的 vector 可能包含垃圾,对吗?
另一种选择是将分配器对象作为对每个函数的引用作为附加参数传递,但这有点丑陋...
有没有一种方法可以安全地“嵌入” vector 中的分配器对象?
你怎么解决这个问题?
最佳答案
分配器必须是CopyConstructible,并且没有异常,之后a1 == a2
必须保留(这意味着它们共享相同的内存池)。我强烈建议阅读this page on the Allocator concept。std::vector
存储您给它的分配器的副本。
因此,如果正确实现分配器以使其可以安全复制,则给定的代码将没有问题。
关于c++ - 返回使用自定义分配器的 vector ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39961702/