Да, будут отрицательные последствия.
Вы не должны delete
объект, который не был выделен с new
. Если объект был размещен в стеке, ваш компилятор уже сгенерировал вызов своего деструктора в конце своей области видимости. Это означает, что вы будете вызывать деструктор дважды, что может иметь очень плохие последствия.
Помимо двухкратного вызова деструктора, вы также попытаетесь освободить блок памяти, который был никогда не выделен. Оператор new
предположительно помещает объекты в кучу; delete
ожидает найти объект в той же области, которую оператор new
размещает. Тем не менее, ваш объект, который не был выделен с new
, живет в стеке. Скорее всего, это приведет к сбою вашей программы (если она не сработала после повторного вызова деструктора).
Вы также столкнетесь с серьезными проблемами, если ваш Object
в куче будет жить дольше, чем ваш Object
в стеке: вы получите висячую ссылку где-то в стеке и получите неверные результаты / сбой при следующем обращении к нему.
Общее правило, которое я вижу, состоит в том, что вещи, которые живут в стеке, могут ссылаться на вещи, которые живут в куче, но вещи в куче не должны ссылаться на вещи в стеке из-за очень высокой вероятности того, что они переживут объекты стека. , И указатели на оба не должны смешиваться.