Raf*_*fay 4 c++ pointers memory-leaks memory-management new-operator
我有一个基类玩具和派生类Toy_remote_car和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.*/
Run Code Online (Sandbox Code Playgroud)
上面的代码(ptr = new Toy*)正在创建一个类型为Toy(ptr [0])的指针,它包含派生类Toy_remote_car的对象.
现在我想写这样的代码:
- >不应预定义玩具类型指针的数量.
- >而我会调用add_toy函数,它会创建一个指向我想要的对象类型的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];
Run Code Online (Sandbox Code Playgroud)
- >此外,我将能够访问所有以前的数据.简而言之:
ptr[0]//contains one type of data.
ptr[1]//contains another type.
//and so on
Run Code Online (Sandbox Code Playgroud)
- >所以每当添加一个新玩具时它会自动创建一个类型为Toy的指针(ptr).
我希望我已经很好地解释了我在这段代码中要实现的内容.
请在这方面帮助我.
谢谢
Toy **ptr = new Toy *[n];
Run Code Online (Sandbox Code Playgroud)
其中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;
}
Run Code Online (Sandbox Code Playgroud)
请注意,如果分配失败,toypp
则不会清除其中的旧指针和所有指针.真的,如果你想要一个增长的数组,请使用vector<Toy*>
:
vector<Toy*> toy_ptrs(n);
Run Code Online (Sandbox Code Playgroud)
并添加玩具push_back
.
不要忘记delete
每一个Toy*
,并与第一种方法,来delete[]
了Toy**
.
处理各种数据可以通过继承来完成.