Создание объекта: с «новым» или без него [duplicate]

Возможный дубликат:
В чем разница между созданием экземпляра объекта с использованием нового и без

Это, вероятно, основной вопрос, и, возможно, уже задавался (скажем, здесь ); но я до сих пор этого не понимаю. Итак, позвольте мне спросить.

Рассмотрим следующий класс C ++:

class Obj{
    char* str;
public:
    Obj(char* s){
        str = s;
        cout << str;
    }
    ~Obj(){
        cout << "Done!\n";
        delete str;        // See the comment of "Loki Astari" below on why this line of code is bad practice
    }
};

в чем разница между следующими фрагментами кода:

Obj o1 ("Hi\n");

и

Obj* o2 = new Obj("Hi\n");

Почему первый вызывает деструктор, а второй - нет (без явный вызов delete )?

Какой из них предпочтительнее?

119
задан M.S. Dousti 2 February 2018 в 19:01
поделиться