Распределение памяти с помощью new
говорит компилятору: «Не волнуйтесь, я знаю, что делаю: этот объект будет контролироваться мной». Это означает, что компилятор, действительно, не будет беспокоиться об этом, и вы будете ответственны за это. Лучшее решение: не делайте этого, если вы действительно не знаете, что делаете. Обратите внимание, что я почти уверен, что знаю, что делаю, и все же я обычно не использую new
, потому что в этом нет необходимости!
В вашем примере вы хотите использовать
Object foo() {
Object a;
// do something
return a;
}
Концептуально объект создается в стеке и копируется при его возврате. После завершения копирования локальный объект уничтожается. На практике это случается редко: поскольку локальный объект уничтожается сразу после копирования, компилятору предоставляется свобода делать то, что вы обычно хотите, а именно: объект a
не копируется и не уничтожается, а фактически вернулся напрямую. Однако это должно привести к тому же результату (если это не так, ваш класс где-то сломан).