双指针动态分配
Dynamic allocation with DOUBLE POINTERS
我有一个基类Toy和派生类Toy_mote_car amd Toy_battery_car。
我在做这个:
Toy** ptr;
ptr=new Toy*;
ptr[0]=new Toy_remote_car[1];
ptr[1]=new Toy_battery_car[1];/*this is completely wrong according to my teacher because i never created ptr[1]. Instead this is a misuse of memory according to him.*/
上面的代码(ptr=new Toy*(正在创建一个类型为Toy(ptr[0](的指针,该指针包含派生类Toy_mote_car的对象。
现在我想写这样一个代码:
->Toy类型指针的数量不应该是预定义的。
->相反,我会调用一个addtoy函数,它会创建一个指向我想要的对象类型的ptr。此外,如果我再次调用add_toy函数,它不应该将数据分配给previos ptr,而是应该创建一个新的ptr。以下约定可能会有所帮助:
ptr[0]=new Toy_remote_car[1];
/*we want to add more toys so add_toy function called. A check is applied.*/
/*The check checks that ptr[0] already contains a value so it creates another pointer ptr[1]*/
ptr[1]=new Toy_battery_car[1];
->此外,我还可以访问以前的所有数据。简而言之:
ptr[0]//contains one type of data.
ptr[1]//contains another type.
//and so on
->因此每当添加新的Toy时,它都会自动创建Toy类型的指针(ptr(。
我希望我已经很好地解释了我试图在这段代码中实现的内容。
请在这方面帮助我。
感谢
Toy **ptr = new Toy *[n];
其中n
保存所需的Toy
指针的数量。增加阵列很难,但可以做到:
// Add x to toypp, an array of n pointers
// very stupid, linear-time algorithm
Toy **add_toy(Toy *x, Toy **toypp, size_t n)
{
Toy **new_toypp = new Toy*[n+1];
// copy the old array's contents
for (size_t i=0; i<n; i++)
new_toypp[i] = toypp[i];
toypp[n] = x;
// clean up
delete[] toypp;
return new_toypp;
}
请注意,如果分配失败,则不会清理旧的toypp
及其中的所有指针。实际上,如果您想要一个增长的数组,请使用vector<Toy*>
:
vector<Toy*> toy_ptrs(n);
添加CCD_ 5玩具。
不要忘记每一个Toy*
都要delete
,使用第一种方法,delete[]
就是Toy**
。
处理各种类型的数据可以通过继承来完成。
我用一个非常简单的逻辑编写了这段代码。这一切都很顺利。请看一看并发表意见。
void add_toy_var()
{
temp=NULL;
temp=tptr;
tptr=NULL;
delete[] tptr;
C1.count1++;
tptr=new Toy*[C1.count1];
if(temp!=NULL)
{
for(int i=0; i<(C1.count1-1); i++)
{
tptr[i]=temp[i];
}
}
int choice2;
cout<<"Which Toy you want to add?"<<endl;
cout<<"1. Remote Toy Car"<<endl;
cout<<"2. Batt powered toy car"<<endl;
cout<<"3. Batt powered toy bike"<<endl;
cout<<"4. Remote control toy heli"<<endl;
cin>>choice2;
if(choice2==1)
{
tptr[C1.count1-1]=new Toy_car_rem[1];
tptr[C1.count1-1]->set_data();
}
else if(choice2==2)
{
tptr[C1.count1-1]=new Toy_car_batt[1];
tptr[C1.count1-1]->set_data();
}
else if(choice2==3)
{
tptr[C1.count1-1]=new Toy_bike_batt[1];
tptr[C1.count1-1]->set_data();
}
temp=NULL;
delete[] temp;
}
相关文章:
- 在对象指针上调用 Delete 是否会递归删除其动态分配的成员
- 使用指针在存在特征库的情况下动态分配 c++ 中的矩阵
- 尝试创建指向动态分配的字符数组的指针
- 如何动态分配由三重指针到类的矩阵?
- 将数组动态分配到具有指针参数的函数中
- 如何从文件读取到动态分配的指向结构的指针链表中?
- 是否可以将函数动态分配给函数指针
- 将动态分配的对象添加到对象指针数组中
- 如何为const char double指针(使用新的)动态分配内存
- 动态分配的矩阵不会获得指向指针的指针
- 使用 new: "potentially uninitialized pointer"将对象数组动态分配给指针
- 将运算符重写应用于具有动态分配指针的类
- 我可以动态分配以前分配的内存,但用不同的指针分配
- C 删除指向动态分配对象的指针
- 在动态分配的指针数组中扩展内存
- 指针数组在动态分配时应指向什么
- 向一系列指针及其替代方案的动态分配
- 如何删除用于动态分配对象的智能指针
- 我如何检查该点动态分配的单指针是否为null
- 指针动态分配(核心倾倒)