Программирование на "С/C++" и не только

Previous Entry Share Next Entry
функция возвращает объект с динамической ссылкой
kaz_orphan wrote in ru_cpp
уперся в следующее:

есть класс содержащий в себе указатель на динамическую память (кучу). В общем-то это массив размерность которого определяется при создании объекта. конструктор объекта кроме всего прочего, выделяет сколько нужно памяти и вносит ее адрес в соответствующее поле.

class MyClass {
...
type* data;
...
}

соответственно деструктор освобождает эту память, во избежание утечек памяти.

кроме того есть метод класса, который должен вернуть значение - объект того же класса, но с измененными значениями динамической памяти. Исходный объект и память на которую он указывает должны остаться неизменными.

внутри метода - все просто: создаю локальный экземпляр объекта, изменяю его динамическую область. А вот как вернуть это в вызывающий контекст - убей бох не пойму. Если сделать просто

MyClass MyClass::method(....) {

MyClass temp(....);
...
return temp;
}

деструктор объекта похерит динамическую память и присвоение

MyClass X(...);
MyClass Y(...);
...
Y = X.method(...);

заканчивается ошибкой кучи при выполнении.

Третий час сижу и ломаю голову, ничего не придумал. Что делать?

  • 1
переделать так, чтобы возвращать не сам вновь созданный объект, а указатель на него?


типа как-то так
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)

.спасибо за отклик. модератор мудак.

  • 1
?

Log in