gpt4 book ai didi

c++ - 返回使用自定义分配器的 vector

转载 作者:行者123 更新时间:2023-11-30 01:09:38 25 4
gpt4 key购买 nike

假设您开发了一个优化的自定义分配器,您希望将其与std::vector 一起使用(例如,对于小型分配,自定义分配器改为从堆栈获取内存堆,有点像 std::string 的 SSO;或者它使用例如 Windows 上的 VirtualAlloc 分配大块内存,然后从内部分配单个分配一个 block 只是增加一个指针)。

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 无一异常(exception),之后 a1 == a2 必须持有(意味着它们共享相同的内存池)。我强烈建议阅读 this page on the Allocator concept .

std::vector 存储您提供的分配器的拷贝。

因此,如果您正确地实现您的分配器以安全复制,您给定的代码将不会有问题。

关于c++ - 返回使用自定义分配器的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39961702/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com