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

Classic List of object in C++ using pointers

我想用 C++ 创建一个对象的定向列表。我有 3 classes:BasicMiachine、Desktop、Laptop。最后两个 classses 扩展了 BasicMachine。我想要做的是仅使用一个列表制作对象列表(台式机,笔记本电脑)。在抽象的 Basic Class 中 class (因为我已经将一个方法声明为虚拟的)我有一个字段,它是指向下一个对象的指针,是 BasicClass 类型。下面是我的代码:

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
    }

};

在我添加一台和第二台计算机后,出现如下错误:"Access violation writing location 0x00000050." 指针有问题吗?我使用 BasicClass 类型指针来保存两个对象(台式机、笔记本电脑)。

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

addNewComputer改为例如

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

事情应该会更好。

我建议你看看standard containers。无论如何,问题是你正在按值传递指针,所以当你调用 "new" 时,addNewComputer() 中的指针指向一个新的内存方向,当函数 returns、headList 和迭代器为空时(注意内存泄漏问题)。要解决您的问题,您需要通过引用传递 headList 和迭代器,即

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

希望对您有所帮助。