уперся в следующее:
есть класс содержащий в себе указатель на динамическую память (кучу). В общем-то это массив размерность которого определяется при создании объекта. конструктор объекта кроме всего прочего, выделяет сколько нужно памяти и вносит ее адрес в соответствующее поле.
class MyClass {
...
type* data;
...
}
соответственно деструктор освобождает эту память, во избежание утечек памяти.
кроме того есть метод класса, который должен вернуть значение - объект того же класса, но с измененными значениями динамической памяти. Исходный объект и память на которую он указывает должны остаться неизменными.
внутри метода - все просто: создаю локальный экземпляр объекта, изменяю его динамическую область. А вот как вернуть это в вызывающий контекст - убей бох не пойму. Если сделать просто
MyClass MyClass::method(....) {
MyClass temp(....);
...
return temp;
}
деструктор объекта похерит динамическую память и присвоение
MyClass X(...);
MyClass Y(...);
...
Y = X.method(...);
заканчивается ошибкой кучи при выполнении.
Третий час сижу и ломаю голову, ничего не придумал. Что делать?
- функция возвращает объект с динамической ссылкой
типа как-то так
MyClass MyClass::method(....) {
pTemp = new temp(....);
...
return pTemp;
}
MyClass X(...);
...
pY = X.method(...);
...
delete pY;
Чтобы не удариться об delete, можно вместо указателя использовать смартпойнтер, как предлагали выше.
Edited at 2013-03-20 07:55 am (UTC)