c++中使用指针的经典对象列表
Classic List of object in C++ using pointers
我想在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)
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 你能重载对象变量名本身返回的内容吗
- C++使用整数的压缩数组初始化对象
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 将对象移动到std::shared_ptr
- 代理对象的常量正确性
- 提升 ASIO 无法识别计时器对象
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 如何返回一个类的两个对象相加的结果
- 使用std::函数映射对象方法
- 是否需要删除包含对象的"pair"?
- 如何在自删除后将对象设置为nullptr
- 迭代时从向量和内存中删除对象
- 构造对象的歧义
- c++中使用指针的经典对象列表