Leave a comment

Comments 7

vasaku March 20 2013, 06:44:39 UTC
применить конструктор копирования, вместо вызова метода, использовать умный указатель для данных, создавать объект который возвращаем в динамической памяти.
может быть что-то из этого подойдет к ситуации.

Reply

kaz_orphan March 20 2013, 09:34:44 UTC
.спасибо за отклик. модератор мудак.

Reply


cd_riper March 20 2013, 07:38:35 UTC
в детали не вникал, но похоже смотреть надо на shared_ptr :)

Reply

kaz_orphan March 20 2013, 09:35:25 UTC
.спасибо за отклик. модератор мудак.

Reply


alll March 20 2013, 07:51:38 UTC
переделать так, чтобы возвращать не сам вновь созданный объект, а указатель на него?

типа как-то так
MyClass MyClass::method(....) {

pTemp = new temp(....);
...
return pTemp;
}

MyClass X(...);
...
pY = X.method(...);
...
delete pY;

Чтобы не удариться об delete, можно вместо указателя использовать смартпойнтер, как предлагали выше.

Reply

kaz_orphan March 20 2013, 09:35:48 UTC
.спасибо за отклик. модератор мудак.

Reply


aso March 23 2013, 21:33:59 UTC
кроме того есть метод класса, который должен вернуть значение - объект того же класса, но с измененными значениями динамической памяти. Исходный объект и память на которую он указывает должны остаться неизменными.

"Смысл" такого возвращаемого значения - это должно быть "самостоятельное" значение или что?
Можно сделать статическую переменную внутри метода (но тогда будет только один возвращаемый объект), можно создать скрытое поле-указатель на объект класса, указатель и возвращать через метод (тогда для этого поля нужно создавать объект класса через new и делать delete в деструкторе).
Можно ввести операцию присваивания, которая будет обменивать объекты, на которые укахывает data у каждого из объектов и создать конструктор копирования, который присваивает полю data создаваемого объекта значение поля data объекта, с которого копируется, а тому - записывает NULL в поле data.
Тогда мы возвращаем сам тип MyClass.
Будет некоторое количество лишних присваиваний - но работать будет.

Reply


Leave a comment

Up