Task 2 Register of Three
Кода минава тестовете но преминава memory лимита. Няма memory leaks мисля предполагам че проблема ми е в assignment оператора но не мога да намеря друг начин да го направя.
#include "Register.h"
Register::Register(size_t numCompanies)
{
numAdded = numCompanies;
companiesArray = new Company[numCompanies];
}
void Register::add(const Company& c)
{
static int index = 0;
companiesArray[index] = c;
++index;
if (index == numAdded)
{
for (size_t i = 0; i < numAdded; i++)
{
--index;
}
}
}
Company Register::get(int companyId) const
{
for (size_t i = 0; i < numAdded; i++)
{
if (companiesArray[i].getId() == companyId)
{
return companiesArray[i];
break;
}
}
}
Register& Register::operator=(const Register& other)
{
if (this != &other)
{
this->numAdded = other.numAdded;
this->companiesArray = new Company[this->numAdded];
*this->companiesArray = *other.companiesArray;
}
return *this;
}
Register::Register(const Register& other)
:numAdded(other.numAdded),companiesArray(other.companiesArray)
{
}
Register::~Register()
{
delete[] companiesArray;
companiesArray = nullptr;
}
Проблема е че надвишавам memory лимита с около 1.5MB. Откъде ми идва повечето RAM ме интересува.
1. Аз това съм направил доколкото виждам. Ако е грешно и заделям повече от необходимото ако може да ме насочиш.
2. Не намерих начин как да ползвам numAdded за индекс. Този if не проверява края за да добавя елементи прави друго. Може да е гешно но е мого ясно каква му е функцията.
3. Това го опеавих но така като гледам не ми идват от там тези 1.5MB RAM заради който не ми минава решението.
Привет!
Понеже беше доста дълго за писанe, ти го пуснах на порции и може да не си го видял цялото. Виж точка 4 за проблема с надвишената памет.
Eто така си създаваш обект от тип Register, както съм обяснил в точка 1: numAdded го мисли като индекс, той е различен за всеки един обект от тип Register:
Register::Register(size_t numCompanies) : numAdded(0), companiesArray(new Company[numCompanies]) {}
void Register::add(const Company &c) { this->companiesArray[this->numAdded] = c; this->numAdded++; }
Поздрави!
Да получи се с промяната на точка 4. Докато тествах го пусках да направи 9999999 повторения и рамта не помръдваше. Трябва да се мисли повече какво откаде идва и каде отива. Въобще не се сетих че this е вече инициализирано и е заделена памет при създаване. Благодаря.