将C++向量作为成员放在使用内存池的类中

Dee*_*p-B 5 c++ heap memory-management stdvector

我一直在编写一个用于数据库访问的多线程DLL,使用ADO/ODBC与遗留应用程序一起使用.我需要为每个线程保留多个数据库连接,因此我将每个连接的ADO对象放在一个对象中,并考虑将它们的数组保存在自定义的threadInfo对象中.显然,矢量在这里会更好 - 我需要在移动中删除/重新排列对象,矢量会简化它.问题是,我为每个线程分配一个堆,以避免堆争用和东西,并从那里分配我的所有内存.

所以我的问题是:如何从特定于线程的堆中进行向量分配?(或者它会在内部知道从同一堆中分配内存作为其包装类 - 听起来不太可能,但我不是C++人员)我已经google了一下,看起来我可能需要编写一个分配器或者其他东西 - 这看起来像我不想要的那么多工作.还有其他方法吗?我听说过vector可以使用placement-new来处理所有内容,所以可以重载operator new吗?

我对C++内部的知识缺乏帮助,因为我主要是一个C程序员(甚至相对而言).我很可能在某个地方缺少基本的东西.如果没有什么比这更容易了 - 我可能只是去做阵列的事情,但希望它不会那样.

我正在使用MS-VC++ 6.0(嘿,笑起来很粗鲁!:-P).

任何/所有帮助将不胜感激.

sbi*_*sbi 3

如何从线程特定的堆中分配向量?

您(在编译时)向它传递一个适当的分配器。是关于如何做到这一点的经典。如果您遵循该文章的建议(或者甚至只是复制代码并在需要时进行调整),那么对于 C 程序员来说,编写分配器可能比使用动态分配数组来正确理解类的复制语义更容易。

请注意,如果您将对象放入向量(或您自己的数组,FTM)中,而它们本身使用堆(例如字符串),则您需要认为它们也使用您的特殊堆。对于标准库的容器(std::basic_string<>就是这样的容器),这很容易,因为您也可以将分配器传递给它们。对于你自己的类型,你必须自己确定。

并尝试尽快摆脱​​VC6。它有毒。