c++中使用指针的经典对象列表

Classic List of object in C++ using pointers

本文关键字:经典 对象 列表 指针 c++      更新时间:2023-10-16

我想在c++中创建一个对象的定向列表。我有3个班:基本机,台式机,笔记本电脑。最后两个类扩展了BasicMachine。我想做的是制作一个对象列表(桌面,笔记本电脑),只使用一个列表。在基本类这是抽象类(因为我已经声明了一个方法作为虚拟),我有一个字段,这是一个指针下一个对象是一个基本类类型。下面是我的代码:

int main () {
    BasicClass* headList= NULL;
    BasicClass* iterator = NULL;
    while(....)
    {
        switch(.....){
        case 1:
            addNewComputer(headList,iterator,numberOfObjects);
            break;
        }
    }

void static addNewComputer(BasicClass* headList, BasicClass* iterator,short numberOfObjects)
{
    short choice;
    cout<<"What is your machine?"<<endl<<"1) Desktop or2) Laptop"<<endl;
    cout<<"Your choice: "; cin>>choice;

    if(choice== 1)
    {
        //Add some data to variables// ....//
        if(numberOfObjects == 0)
        {
            headList = new Desktop(wysokosc,dlugosc,szerokosc, taktowanieProcesora, numerIdentyfikacyjny, typProcesora, nazwaWSieci,ID);
            iterator= headList ;
            iterator->nextObject = NULL;

        }
        else
        {
            BasicClass* tmpIterator= NULL;
            tmpIterator= headList ;

                tmpIterator->nextObject = new Desktop(wysokosc,dlugosc,szerokosc, taktowanieProcesora, numerIdentyfikacyjny, typProcesora, nazwaWSieci,ID);
                tmpIterator= pomocniczyWskaznik -> nextObject;
                tmpIterator->nextObject = NULL;
        }

    }
    else if(choice == 2)
    {
         //It is the same as above but I add here a La
    }
};

在我添加一台和第二台计算机后,我得到了一个错误,如:"访问违反写入位置0x00000050。"是指针的问题吗?我使用BasicClass类型指针来保存这两个对象(Desktop, Laptop)。

你犯了按值传递指针而不是按引用传递指针的典型错误。

addNewComputer改为e.g.

void static addNewComputer(BasicClass*& headList, BasicClass*& iterator,short numberOfObjects)

我建议您看一下标准容器。无论如何,问题是你是通过值传递指针,所以当你调用"new"addNewComputer()中的指针指向一个新的内存方向,当函数返回时,headList和迭代器是空的(注意内存泄漏问题)。为了解决这个问题,你需要通过引用传递headList和迭代器,例如

void static addNewComputer(BasicClass*& headList, BasicClass*& iterator,short numberOfObjects)