Итак, у меня проблема с домашним заданием, потому что getApple
is const, я не могу установить locallyAllocated = false
, что означает, что когда getApple
вызывается с яблоком, созданным и освобождаемым в какой-либо другой программе, мой деструктор пытается освободить памяти и выбрасывает двойную свободную ошибку. Что я делаю неправильно, и как я могу это исправить? Примечание: функции, их параметры и подписи должны быть такими, какими они предназначены для нашего задания. Спасибо!Как узнать, когда освободить память?
class poop
{
Apple localApple;
bool locallyAllocated;
void* pointer;
public:
poop(const Apple &apple)
{
//Set our local apple to the apple in the provided address
localApple = apple;
locallyAllocated = false;
}
poop(string descr)
{
localApple.description = descr;
pointer = maloc(sizeof(localApple);
localApple.pointer = pointer
locallyAllocated = true;
}
~poop()
{
if(locallyAllocated)
{
//This throws a double free error if "getApple" is ever called
free(pointer);
}
}
void getApple(Apple* apple) const
{
if(apple)
{
//Copies our local apple into the address of the given apple
//Because this function is "const", i can't do anything like set "locallyAllocated" to false
*apple = localApple
}
}
}
Лучшее имя класса когда-либо! Кроме того, наименее ироничный комментарий когда-либо. – unwind
Вы можете найти ключевое слово 'mutable'. – Angew
Вы можете скопировать яблоко, если хотите освободить его память в другом классе.Но лучше избегать freeng-памяти вне класса, который выделил его – SpongeBobFan