나는 이것을하기가 힘들다. 기본적으로 "Item"이라는 추상 기본 클래스에서 파생 된 "integer"라는 클래스가 있습니다. 나는 다음과 같이 객체를 정수로 포인터의 배열의 모든 요소를 추가하려고 :정수 개체에 대한 포인터 배열의 요소를 더하는 것
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에 저장하면 메모리 누수가 발생할 수 있습니다. 더 좋은 방법이 있나요?
사용'표준 :: 벡터의 스마트 포인터. – vsoftco
@vsoftco 이것은 할당이고 나는 C 스타일의 배열과 포인터를 사용해야한다. ( – Pantsuu