2014-11-26 6 views
0
The program I should create will use a dynamic array which will store Revenue objects. The array should be dynamic so that the user of the program can enter the number of Revenue records. I am confused as to how to pull this off. 

БлагодаряКак создать динамические массивы

, например, сказать, что у меня есть:

class Revenue 
{ 
private: 
(tons of function members in middle) 

public: 

} 

Теперь мне нужно сделать массив, который выглядит примерно так

INT Arry;

cout << "how many Revenue tiers do you want?: "; cin >> arry; 
Revenue rev[arry];//dynamic array 

(это неправильно делать, конечно)

ответ

3

Вы должны динамически выделять для него память:

Revenue* rev = new Revenue[arry]; 

И когда вы закончите с этим, не забудьте удалить это

delete[] rev; 

это гораздо лучше, хотя использовать смарт-указатели, как std::unique_ptr (или std::shared_ptr), хотя для массивов std::shared_ptr немного сложнее использовать, поскольку вы должны определить свой собственный дезактиватор.

С std::unique_ptr вы можете написать код, как

std::unique_ptr<Revenue[]> p(new Revenue[arry]); 

и забыть о разрушении, удаление и т.д. смарт-указатель будет заботиться все очистки, когда он выходит из области видимости.

+0

он сказал, что ожидается спецификатор типа, но другой, чем ваша информация работала спасибо. –

+0

@LegacyWink извините, это была опечатка, исправленная сейчас. – vsoftco

+0

очень круто, я бы использовал вашу технику, но, к сожалению, требуется, чтобы я использовал динамический массив. во всяком случае, что может вызвать этот тип спецификатора и что это значит? –

2

Вы не должны использовать динамическое выделение/освобождение вручную, вместо

Используйте std::vector

std::vector <Revenue> vec; 

cin >> arry; 

vec.resize(arry); // Resizes vec to hold exactly arry no. of objects 
+0

«Использовать' std :: vector' »вроде как [tag: C++] 's version of" использовать jQuery "... –

Смежные вопросы