применить конструктор копирования, вместо вызова метода, использовать умный указатель для данных, создавать объект который возвращаем в динамической памяти. может быть что-то из этого подойдет к ситуации.
кроме того есть метод класса, который должен вернуть значение - объект того же класса, но с измененными значениями динамической памяти. Исходный объект и память на которую он указывает должны остаться неизменными.
"Смысл" такого возвращаемого значения - это должно быть "самостоятельное" значение или что? Можно сделать статическую переменную внутри метода (но тогда будет только один возвращаемый объект), можно создать скрытое поле-указатель на объект класса, указатель и возвращать через метод (тогда для этого поля нужно создавать объект класса через new и делать delete в деструкторе). Можно ввести операцию присваивания, которая будет обменивать объекты, на которые укахывает data у каждого из объектов и создать конструктор копирования, который присваивает полю data создаваемого объекта значение поля data объекта, с которого копируется, а тому - записывает NULL в поле data. Тогда мы возвращаем сам тип MyClass. Будет некоторое количество лишних присваиваний - но работать будет.
Comments 7
может быть что-то из этого подойдет к ситуации.
Reply
Reply
Reply
Reply
типа как-то так
MyClass MyClass::method(....) {
pTemp = new temp(....);
...
return pTemp;
}
MyClass X(...);
...
pY = X.method(...);
...
delete pY;
Чтобы не удариться об delete, можно вместо указателя использовать смартпойнтер, как предлагали выше.
Reply
Reply
"Смысл" такого возвращаемого значения - это должно быть "самостоятельное" значение или что?
Можно сделать статическую переменную внутри метода (но тогда будет только один возвращаемый объект), можно создать скрытое поле-указатель на объект класса, указатель и возвращать через метод (тогда для этого поля нужно создавать объект класса через new и делать delete в деструкторе).
Можно ввести операцию присваивания, которая будет обменивать объекты, на которые укахывает data у каждого из объектов и создать конструктор копирования, который присваивает полю data создаваемого объекта значение поля data объекта, с которого копируется, а тому - записывает NULL в поле data.
Тогда мы возвращаем сам тип MyClass.
Будет некоторое количество лишних присваиваний - но работать будет.
Reply
Leave a comment