В C ++ есть указатели, которые неявно присутствуют в Java: есть разница между объектом (который является сущностью в памяти) и его адресом.В Java вам необходимо явно создать объект, потому что когда вы пишете
MyClass name;
, вы создаете ссылку на объект этого класса.Это означает, что имя идентифицирует небольшую область памяти, которая содержит реальный адрес объекта.Когда вы строите весь дом с использованием нового, он возвращает только адрес, который назначен этой маленькой области памяти.
В C ++ лучше контролируется память, и у вас есть 2 способа создания объекта: еслиВы используете оператор
MyClass object;
Этот объект создается в стеке.Это означает, что когда функция возвращается, объект уничтожается.Обратите внимание, что объект создается автоматически, без использования оператора new.Если вы хотите, чтобы объект сохранил уничтожение стека, вы должны использовать оператор new, который возвращает указатель на вновь созданный объект:
MyClass *objectPtr = new MyClass();
*, помещенный после имени класса, означает, что вы спрашиваетедля относительного типа указателя вместо выделения этого объекта.
Помните, что вы должны очистить память, когда вам больше не нужен объект, или произойдет утечка памяти:
delete objectPtr;
Итак, вы можете сделать так:
MyClass *yourfunction(bool param) {
if (param)
return new MyClass(A);
return new MyClass(B);
}
В любом случае вы должны знать, что указатели вообще не безопасны!Предоставление пользователю контроля над указателями может привести к плохому коду, плохим практикам и многим вещам, которые вообще не годятся. Непосредственный пример: что если вы забудете очистить память после использования объекта?)
В этом случаеЛучше, если вы используете умные указатели, но сейчас действительно слишком много, чтобы сказать :) Наслаждайтесь поиском!
HIH