在c++中创建池概念

Making a pool concept in c++

本文关键字:创建 c++      更新时间:2023-10-16

我有一个结构

struct Employee 
{ 
 char   uName  [255]; 
 struct   Employee *  next; 
 struct   Employee *  prev; 
};

我只想一次分配100个结构对象的内存,然后一个接一个地使用它们,我制作了一个链表。如果内存被完全消耗,那么我想再次分配100个对象内存

我以的身份进行分配

struct Employee * chunk=new struct Employee[100];

现在,当我想向链表添加一个新节点时,我想从这个已经分配的内存中获取对象。有人能告诉我们如何实现吗

Employee * pEmployeeData=NULL;
for(long int i=1;i<=100;i++)
{
        pEmployeeData=EmployeePool+i;
        pEmployeeData->next=NULL;
        pEmployeeData->prev=NULL;
        InsertAtEnd(pEmployeeData);
}

其中InsertAtEnd在链表的末尾插入节点。请说明如何实现此

我强烈建议您不要试图通过编写自己的链表来重新发明轮子,而是查看C++标准库,该库包含可供您使用的现成容器类型。(例如std::vectorstd::list)。

容器类型存在于C++标准库中,用于存储数据/对象的集合。例如,你可以做一些类似的事情

#include <iostream>
#include <vector>
#include <string>
struct Employee
{
    std::string name;
    int id;
};
int main()
{
    std::vector<Employee> my_employees;
    Employee fred = { "Fred", 1 };
    Employee bob = { "Bob", 2 };
    my_employees.push_back( fred );
    my_employees.push_back( bob );

    std::cout << my_employees[0].id << " " << my_employees[0].name << "n"
              << my_employees[1].id << " " << my_employees[1].name << std::endl;
}

标准容器易于使用和学习(你会发现大量的互联网资源描述了如何使用它们,你的书也应该告诉你!);如果你是C++的新手,那么在尝试创建自己的C++之前,最好先弄清楚如何使用这些。

您可以覆盖类的newdelete运算符。

new必须查看任何现有的池,看看是否有空闲对象,如果没有,则需要分配一个池。然后,它将返回从中分配的内存。

delete需要检查所提供对象分配到的池。如果其中仍分配有ANY对象,则该池将保留,否则,可以删除该池。

此外,由于您使用的是C++,请考虑使用一个完整的类(尽管差别很小)