new
- это новый goto
.
Вспомните, почему goto
так поносят: хотя это мощный низкоуровневый инструмент для управления потоком, люди часто используют его излишне сложными способамиэто сделало код трудным для подражания.Кроме того, самые полезные и простые для чтения шаблоны были закодированы в операторах структурированного программирования (например, for
или while
);конечный эффект заключается в том, что код, в котором goto
является подходящим способом, довольно редок; если у вас возникает соблазн написать goto
, вы, вероятно, делаете что-то плохо (если вы не действительно знаете, что вывы делаете).
new
похож - он часто используется, чтобы сделать вещи излишне сложными и трудными для чтения, и наиболее полезные шаблоны использования могут быть закодированы в различные классы.Кроме того, если вам нужно использовать какие-либо новые шаблоны использования, для которых еще нет стандартных классов, вы можете написать свои собственные классы, которые их кодируют!
Я бы даже сказал, что new
хуже чем goto
, из-за необходимости сопряжения new
и delete
операторов.
Как и goto
, если вы когда-либо думаете, что вам нужно использовать new
, вы, вероятно, делаетечто-то плохое - особенно если вы делаете это вне реализации класса, цель которого в жизни состоит в том, чтобы инкапсулировать любые динамические выделения, которые вам нужно сделать.