我很难做到这一点。 基本上我有一个名为“整数”的类,它来自一个名为“Item”的抽象基类。 我试图将指向数组的所有元素添加到整数对象,如下所示:
class Item
{
public:
virtual void print() = 0;
virtual string getType() = 0;
virtual Item* add(Item *item) = 0;
};
class integer: public Item {
private:
int data;
public:
integer(int _data): data(_data){;}
void print () {
cout << data << "\n";
}
string getType() {
return "INTEGER";
}
integer* add(Item *item) {
if(this -> getType() != item -> getType()) {
throw "TYPE MISMATCH" ;
}
integer* tempInt = dynamic_cast<integer*>(item);
return new integer(this -> data + tempInt -> data);
}
};
void printAll(Item** items, int n) {
for(int i = 0; i < n; ++i)
items[i] -> print();
}
void addPrintAll(Item ** items, int n) {
Item* p = items[0];
for(int i = 1; i < n; i++) {
p = p -> add(items[i]);
}
p -> print();
}
void main()
{
int n = 10;
Item **integers = new Item*[n];
Item **strings = new Item*[n];
// populate lists
for (int i = 0; i < n; i++)
{
integers[i] = new integer(i);
}
try
{
printAll(integers, n); // print integers
addPrintAll(integers, n); // add integers
}
catch(char *e)
{
cout << e;
}
}
现在在addPrintAll函数的那一行:
p = p -> add(items[i]);
我在p上反复调用new运算符而不删除,从而导致内存泄漏。 有没有更好的方法呢?
答案 0 :(得分:1)
您可以为该类实现运算符+ =()。在项目中它将是未定义的:
virtual Item& operator+=(Item& other) = 0;
在整数类中实现它:
Item& operator+=(Item& other) {
if(other.getType() != getType()) {
throw "TYPE MISMATCH" ;
}
data += dynamic_cast<integer&>(other).data;
return *this;
}
在main中,在try块内部,使用它:
integer sum(0);
for(int i = 0; i < n; ++i)
sum += *integers[i];
sum.print();